Длина элемента и индекс с простым html dom

Я использую Simple HTML DOM, чтобы получить такой элемент:

foreach($html->find('img') as $d) { 
 echo $d->outertext;
}

Это будет эхом для всех изображений. Скажем, например, мне нужно только изображение с индексом (то есть относительно всех изображений) номерами 3,7,14 и> 15. Есть ли способ сделать что-то настолько сложное?


person Youss    schedule 28.07.2013    source источник


Ответы (3)


find возвращает массив, поэтому просто используйте индекс

$imgs =$html->find('img');

$imgs[3];
$imgs[7];
$imgs[14];

for($i=15;$i<count($imgs);$i++){
  $imgs[$i];
}
person Patrick Evans    schedule 28.07.2013
comment
$imgs =$html->find('img'); $imgs[3]; $imgs[7]; $imgs[14]; for($i=15;$i<count($imgs);$i++){ $imgs[$i]; } foreach($html->find($imgs) as $d) { echo $d->outertext; } .......... ничего - person Youss; 28.07.2013
comment
Посмотрите документацию о том, как работают элементы, массив - это массив объектов, которые вы должны использовать независимо от механизма, который библиотека использует для получения фактических данных. - person Patrick Evans; 28.07.2013
comment
и действительно ли он находит какие-либо imgs? если $ imgs оказывается пустым, значит, вы не нашли никаких тегов img. - person Patrick Evans; 28.07.2013
comment
Это веб-сайт. nu.nl Здесь много изображений. Я могу вызвать их, используя код в моем ответе, но реализация вашего кода просто не работает - person Youss; 28.07.2013
comment
вы не просто копируете и вставляете мой код, вы должны адаптировать его для своего кода, и он не просто выходит за рамки вашего старого кода, он просто показывает вам, как вы получите доступ к массиву. вам действительно нужно каким-то образом использовать элементы массива. - person Patrick Evans; 28.07.2013

Вероятно, самый простой способ - добавить все теги img в массив, и оттуда вы можете извлечь их в соответствии с номером индекса.

person ygesher    schedule 28.07.2013
comment
Проблема в извлечении, как мне сделать это эффективно, не повторяя код? - person Youss; 28.07.2013

Этого можно добиться с помощью переменной $count и in_array(). Объявите переменную count перед циклом и объявите массив требуемых идентификаторов. И в цикле вы можете использовать оператор if, чтобы проверить, находится ли идентификатор изображения в массиве или больше 15.

$count = 1;
$ids = array(3, 7, 14);

foreach($html->find('img') as $d) { 
if(in_array($count, $ids) || $count > 15){

 echo $d->outertext;
 $count++;    

}

Надеюсь это поможет!

person Amal Murali    schedule 28.07.2013
comment
Ничего не возвращает - person Youss; 28.07.2013
comment
@Youss: Что выводит print_r($html->find('img'))? - person Amal Murali; 28.07.2013
comment
Ну, как вы ожидаете, что это будет работать, когда у вас ничего нет в массиве? Цикл foreach в вашем вопросе что-нибудь выводит? - person Amal Murali; 28.07.2013
comment
Да, цикл foreach работает, я не знаю, почему ваш код не работает, но я думаю, что это не простое кодирование html dom - person Youss; 28.07.2013