Несогласованные записи с simple_html_dom

#php #simple-html-dom #dynamic-arrays

#php #simple-html-dom #динамические массивы

Вопрос:

Я пытаюсь использовать simple_html_dom и PHP для выбора записей со страницы в форме: имя / задание / адрес. Проблема в том, что не каждая запись хранит значение для ‘job’. Допустим, на странице есть 10 записей, и только 2 из них записывают работу человека, тогда, если я использую что-то вроде следующего:

 foreach($html->find('span[class="name"]') as $e) {
    $name[]=$e->innertext;
}

foreach($html->find('span[class="job"]') as $e) {
    $job[]=$e->innertext;
}

foreach($html->find('span[class="address"]') as $e) {
    $address[]=$e->innertext;
}
  

затем, когда я получаю доступ к трем массивам, я обнаруживаю, что массив $ job имеет длину всего две записи, в то время как имена и адреса имеют длину 10, и поэтому я не знаю, к какому из 10 имен принадлежат эти 2 задания. Есть ли способ сохранить массивы «в ногу» друг с другом или какой-либо другой способ сохранить записи здесь без изменений?

Спасибо.

Ответ №1:

Затем просто вставьте нулевое значение, когда узел задания пуст!!

 foreach($html->find('span[class="job"]') as $e) {
    $value=$e->innertext;

    if (empty($value))
        $job[] = null;
    else
        $job[] = $value;
}
  

Или с использованием сокращенной версии if-else $job[] = (empty($value) ? null : $value);

Комментарии:

1. Спасибо, Эниссей. Ваш ответ хороший, но на практике эти утверждения находятся в замкнутом цикле, циклически повторяющемся один раз для каждой записи. Это означает, что значение $ будет установлено с предыдущей итерации. Я мог бы обнулять его после каждого использования, и окольным путем это то, что я в итоге сделал. Я устанавливаю флаг $, который получает значение true, если мы вводим foreach, и проверяется сразу при выходе, и если true, я присваиваю «» $job[] . Затем я устанавливаю $flag в false и перехожу к следующему полю. Ваш ответ элегантен, но как только вы начнете очищать каждое значение $ после использования, я думаю, что это будет так же грязно, как и у меня.

2. Привет @Enissay. Я думаю, что я доволен тем, где он есть. Это будет одноразовое использование, как только оно заработает должным образом, поэтому мне не нужно беспокоиться о поддержании кода. Следовательно, небольшая неуклюжесть в коде допустима и пропорциональна моим потребностям. Спасибо за вашу поддержку. Я хотел бы отметить ваш ответ как принятый, потому что, учитывая то, что вы знали, когда писали его, это нормально! Спасибо, Эниссей.