#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. Я думаю, что я доволен тем, где он есть. Это будет одноразовое использование, как только оно заработает должным образом, поэтому мне не нужно беспокоиться о поддержании кода. Следовательно, небольшая неуклюжесть в коде допустима и пропорциональна моим потребностям. Спасибо за вашу поддержку. Я хотел бы отметить ваш ответ как принятый, потому что, учитывая то, что вы знали, когда писали его, это нормально! Спасибо, Эниссей.