Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: В цикле foreach получаю только последнюю запись массива
Форумы портала PHP.SU » » Вопросы новичков » В цикле foreach получаю только последнюю запись массива

Страниц (1): [1]
 

1. t3dev - 04 Апреля, 2018 - 12:52:59 - перейти к сообщению
Все добрый день. Я использую следующий код для вывода объектов с массивом значений. Всё работает почти правильно, но в последнем цикле я получаю только последнюю запись массива. Подскажите пожалуйста, что не так?


PHP:
скопировать код в буфер обмена
  1. foreach ($classItems as $i => $items) {
  2.             $childClassesArray = explode(", ", $items->getSubClasses());
  3.             foreach ($childClassesArray as $childClassesCodes) {
  4.                 $childClassesObj = explode(",", $childClassesCodes);                
  5.                 foreach($childClassesObj as $code) {
  6.            // $code выводит список кодов, примерно 50 штук.
  7.                    // Далее находим по коду объект с массивом значений, их столько же сколько и кодов.
  8.                     $childCodesObj = $this->classItemRepository->findByReferenceCode($code);
  9.                    
  10.                     // Добавляем запись об объекте. Но почему то добавляется только последний элемент массива.
  11.                     $items->setChildClasses($childClassesObj);
  12.                 }            
  13.             }          
  14.         }
2. andrewkard - 05 Апреля, 2018 - 16:38:29 - перейти к сообщению
t3dev пишет:
$items->setChildClasses

а что он делает?
3. arbuzmaster - 07 Апреля, 2018 - 22:33:10 - перейти к сообщению
Если $childCodesObj это массив, то
А. Он должен быть объявлен -

Б. Значения в цикле добавляются так
PHP:
скопировать код в буфер обмена
  1. $childCodesObj[] = $this->classItemRepository->findByReferenceCode($code);

А так, как написано в Вашем коде, значение массива просто перезаписывается и в результате Вы получаете последнее значение из цикла.
4. Vladimir Kheifets - 08 Апреля, 2018 - 11:46:07 - перейти к сообщению
t3dev пишет:
Все добрый день. Я использую следующий код для вывода объектов с массивом значений. Всё работает почти правильно, но в последнем цикле я получаю только последнюю запись массива. Подскажите пожалуйста, что не так?


Добрый день!
См. ниже. Значение $items определяется в 1 стр., массив $childClassesObj в 6 стр. Для чего нужна в цикле foreach($childClassesObj as $code) строка $items->setChildClasses($childClassesObj)?
PHP:
скопировать код в буфер обмена
  1. foreach ($classItems as $i => $items)
  2. {
  3.         $childClassesArray = explode(", ", $items->getSubClasses());
  4.         foreach ($childClassesArray as $childClassesCodes)
  5.         {
  6.                 $childClassesObj = explode(",", $childClassesCodes);
  7.                 foreach($childClassesObj as $code)
  8.                 {
  9.                     ..................
  10.                     ..................
  11.                     $items->setChildClasses($childClassesObj);
  12.                 }    
  13.         }  
  14. }

Удачи!

 

Powered by ExBB FM 1.0 RC1