#php #simplexml
#php #симплексml
Вопрос:
Я пытаюсь получить таблицу с 3 строками в HTML. Данные поступают из XML-файла, и я помещаю их в массив и анализирую его с помощью foreach в таблице. Проблема в том, что на выходе правильно отображается только один массив, а во втором массиве отображается только 1 ЦЕНА из 5. 5 разных цен находятся в массиве «$recordpElements», я проверил это. Что я делаю не так? См. Пример на рисунке ниже.
public function xmlParserVB():string { global $obj; $valuesvb = $this-gt;xml-gt;xpath("OBJEKT[@ID='$obj']//SAISON"); $valuesp = $this-gt;xml-gt;xpath("//OBJEKT[@ID='$obj']//SAISON//PRICE"); foreach (array_slice($valuesp,0,5) as $recordpElements); foreach (array_slice($valuesvb,0,5) as $recordvbElements) { $display .= 'lt;trgt;'; $display .= 'lt;tdgt;'.$recordvbElements-gt;DESCRIPTION.'lt;/tdgt;'; $display .= 'lt;tdgt;'.$recordvbElements-gt;FROM.' - '.$recordvbElements-gt;UNTIL.'lt;/tdgt;'; $display .= 'lt;tdgt;'.$recordpElements-gt;PRICE.' amp;euro;lt;/tdgt;'; $display .= 'lt;/trgt;'; } $display .= ''; return $display; }
[![введите описание изображения здесь][2]][2]
Ответ №1:
Я не понимаю вашу 5 — ю строку кода.
foreach (array_slice($valuesp,0,5) as $recordpElements);
если вы запустите этот код, то получите последнюю запись array_slice($valuesp,0,5)
в $recordpElements
Итак … вы получите 5-ю запись $valuesp
массива в своем $recordpElements
.
Я не понимаю, почему массив цен( $valuesp
) и массив продуктов( $valuesvb
) должны существовать отдельно, но, предполагая, что это правильно, если последовательность продуктов и последовательность цен совпадают, вам следует попробовать что-то вроде этого:
$price = array_slice($valuesp,0,5); $index = 0; foreach (array_slice($valuesvb,0,5) as $recordvbElements) { $display .= 'lt;trgt;'; $display .= 'lt;tdgt;'.$recordvbElements-gt;DESCRIPTION.'lt;/tdgt;'; $display .= 'lt;tdgt;'.$recordvbElements-gt;FROM.' - '.$recordvbElements-gt;UNTIL.'lt;/tdgt;'; $display .= 'lt;tdgt;'.$price[$index]-gt;PRICE.' amp;euro;lt;/tdgt;'; $display .= 'lt;/trgt;'; $index ; }
Комментарии:
1. Если я выполню этот код для каждого (array_slice($valuesp,0,5) как $recordpElements); я получу первые 5 элементов из своего массива
2.
array_slice($valuesp,0,5)
это получить первые 5 элементов, но если вы запуститеforeach(..... as $recordpElements);
, то получите последний элемент из 5 элементов($valuesp) в$recordpElement
переменной. после этого вы используете $recordpElements. таким образом, вся ваша цена будет 5-й ценой массива.3. Извините, я забыл букву в своем коде. Теперь все работает нормально. Большое спасибо Умному Парню СИЛЬВЕРСТАРУ.