Создайте таблицу из 2 массивов PHP

#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. Извините, я забыл букву в своем коде. Теперь все работает нормально. Большое спасибо Умному Парню СИЛЬВЕРСТАРУ.