Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: вытащить все картинки из кода
 
 автор: eclipse   (03.04.2007 в 12:22)   письмо автору
 
 

привествую =) есть такое регулярное выражение....


preg_match_all("|<div class=\"images\">([\s\S]+)</div>|isU",$line,$out);

foreach($out as $val)
{
 echo $val;
}


которое вытаскивает код картинок... если вывести элементы $out[0][0] $out[0][1] etc то всё выводится... а если выводить циклом то выдается просто ArrayArray и всё...

   
 
 автор: Loki   (03.04.2007 в 13:13)   письмо автору
 
   для: eclipse   (03.04.2007 в 12:22)
 

и?

   
 
 автор: eclipse   (03.04.2007 в 14:06)   письмо автору
 
   для: Loki   (03.04.2007 в 13:13)
 

просто foreach почему то не сработал или я его неправильно применяю... поэтому пришлось фором всё делать....

for ($i = 0; $i<=count($out); $i = $i +1)
{
 echo $out[0][$i]; 
}

тогда почему то не додумался до этого... привык к foreach'у проста...

и почему то count всегда равен двум то есть получается только вывод трёх картинок.... хотя в реале элементов намного больше в массиве...

   
 
 автор: Trianon   (03.04.2007 в 15:00)   письмо автору
 
   для: eclipse   (03.04.2007 в 14:06)
 

>просто foreach почему то не сработал или я его неправильно применяю... поэтому пришлось фором всё делать....
>

>for ($i = 0; $i<=count($out); $i = $i +1)
>{
> echo $out[0][$i]; 
>}
>

это неверный код. Вы перебираете внешний массив, а обращаетесь ко внутреннему.

foreach работает точно также.

foreach($out as $arr) 
   foraech($arr as $val) 
        echo $val;

> почему то count всегда равен двум
потому что у Вас всего два регулярных выражения в шаблоне - общее, и то, что в скобках.

   
 
 автор: eclipse   (03.04.2007 в 15:56)   письмо автору
 
   для: Trianon   (03.04.2007 в 15:00)
 

огромное спасибо за ответ... я просто совсем забыл что массив много мерный... и с таким кодом


foreach($out as $arr)  
   foreach($arr as $val)  
        echo $val;


почему то выводится два массива...

   
 
 автор: Trianon   (03.04.2007 в 17:01)   письмо автору
 
   для: eclipse   (03.04.2007 в 15:56)
 

preg_match формирует несколько массивов - на один больше, чем число скобочных пар в шаблоне. Потому что нутро шаблона само по себе является выражением.

   
 
 автор: eclipse   (03.04.2007 в 17:38)   письмо автору
 
   для: Trianon   (03.04.2007 в 17:01)
 

а можно ли каким нить образом узнать количество элементов в массиве???

   
 
 автор: Trianon   (03.04.2007 в 18:03)   письмо автору
 
   для: eclipse   (03.04.2007 в 17:38)
 

во внешнем - count($out)
во внутреннем - count($out[$i])

Советую посмотреть на доп.параметры функции preg_match().
Её можно попросить вывернуть массив результатов наизнанку - так чтоб его длина была равна числу пойманных шаблоном фрагментов. Частенько так удобнее.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования