Двумерный массив

 
Посетитель
small user social cms
Медаль
Сообщений: 779
значения двумерного массива из-за внутреннего перестают передаваться, помогите решить что не так
Код PHP:
  1.  
  2. <?php foreach($items as $num=>$item) { ?>
  3. <tr id="<?php echo $item['id']; ?>" class="item_tr">
  4. <td><?php echo $item['id']; ?></td>
  5. <td>
  6. <?php if ($items){ ?>
  7. <?php foreach($item['items'] as $id=>$item) { ?>
  8. <a ><?php echo $item['title']; ?></a>
  9.  
  10. <?php } ?>
  11. <?php } ?>
  12. </td>
  13. <td><?php echo $item['d_name']; ?></td>
  14. <td><?php echo $item['psys_title']; ?></td>
  15. <?php } ?>
  16.  
Все что идет до внутреннего массива $item['id'] выдает значение, после внутреннего массива значения $item['d_name'] и $item['psys_title'] пустые.
Если внутренний массив удалить, то все значения выводятся нормально.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1981
6 строчка - видимо, не $items, а $item?
7. строчка - вы пытаетесь во внутреннем цикле определить управляющую переменную $item, хотя она определена уже во внешнем цикле на 2 строчке
8. строчка - в ссылке не определен href. на перебор значений массива не влияет, но не кошерно))
Редактировалось: 2 раз (Последний: 16 ноября 2015 в 13:31)
NOP
Реклама
cms
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3586
Странник:
6 строчка - видимо, не $items, а $item?
скорее $item['items'] и согласен с коллегой по поводу переменной во внутреннем массиве. Надо переделать её.
Редактировалось: 1 раз (Последний: 16 ноября 2015 в 13:36)
Посетитель
small user social cms
Медаль
Сообщений: 779
Странник:

6 строчка - видимо, не $items, а $item?
7. строчка - вы пытаетесь во внутреннем цикле определить управляющую переменную $item, хотя она определена уже во внешнем цикле на 2 строчке
8. строчка - в ссылке не определен href. на перебор значений массива не влияет, но не кошерно))
6.ю можно удалить она не влияет
7. да но нужно вытащить именно все $item['items'] не знаю как по другому
Посетитель
small user social cms
Медаль
Сообщений: 779
Loadырь:

Странник:
6 строчка - видимо, не $items, а $item?
скорее $item['items'] и согласен с коллегой по поводу переменной во внутреннем массиве. Надо переделать её.


Код PHP:
  1.  
  2. <?php foreach($items as $num=>$item) { ?>
  3. <tr id="<?php echo $item['id']; ?>" class="item_tr">
  4. <td><?php echo $item['id']; ?></td>
  5. <td>
  6. <?php foreach($item['items'] as $item) { ?>
  7. <a ><?php echo $item['title']; ?></a>
  8.  
  9. <?php } ?>
  10. </td>
  11. <td><?php echo $item['d_name']; ?></td>
  12. <td><?php echo $item['psys_title']; ?></td>
  13. <?php } ?>
  14.  
делаю так - ничего не меняется, внутренний цикл отрабатывает на ура.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1981
Код PHP:
  1. <?php foreach($item['items'] as $record) { ?>
  2. <a ><?php echo $record['title']; ?></a>
  3.  
  4. <?php } ?>
не?

было бы еще хорошо определение двумерного массива, который мы тут обрабатываем, увидеть для начала.
Редактировалось: 2 раз (Последний: 16 ноября 2015 в 13:52)
NOP
Посетитель
small user social cms
Медаль
Сообщений: 779
Странник:

Код PHP:
  1.  
  2.  
  3.  
  4.  
не?

было бы еще хорошо определение двумерного массива, который мы тут обрабатываем, увидеть для начала.

Ура!!! $record сработало как надо, осталось только недоумение что такое $record
Странник:
Спасибо огромное!
Редактировалось: 1 раз (Последний: 16 ноября 2015 в 14:05)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1981
Gumoff:
что такое $record
управляющая переменная внутреннего цикла. когда вы ее назвали так же, как и управляющую переменную внешнего, тем самым ее переопределили. поэтому после завершения внутреннего цикла внешний не смог работать - управляющая переменная ведь при выходе из цикла разустанавливается. другими словами, она существует только внутри цикла.
так что все просто
Редактировалось: 1 раз (Последний: 16 ноября 2015 в 14:06)
NOP
Посетитель
small user social cms
Медаль
Сообщений: 779
Странник:

Gumoff:
что такое $record
управляющая переменная внутреннего цикла. когда вы ее назвали так же, как и управляющую переменную внешнего, тем самым ее переопределили. поэтому после завершения внутреннего цикла внешний не смог работать - управляющая переменная ведь при выходе из цикла разустанавливается. другими словами, она существует только внутри цикла.
так что все просто

Спасибо я понял наконец, но $record ведь нигде не определена была до этого, как она сработала?!
Или она просто временная получается и отрабатывает только на внутренний цикл.
Редактировалось: 1 раз (Последний: 16 ноября 2015 в 14:09)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1981
да. она определяется только для внутреннего цикла в его заголовке:
foreach($items as $blabla) {...}
$blabla существует только внутри тела цикла. вне цикла она попросту не определена. нет ее там)))))
Редактировалось: 1 раз (Последний: 16 ноября 2015 в 14:15)
NOP
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3586
Gumoff:
но $record ведь нигде не определена была до этого, как она сработала?!
Перевожу на русский
Код PHP:
  1. <?php foreach($item['items'] as $record) { ?>
каждое значение переменной $item['items'] рассматривать как переменную $record (вот тут мы её и объявили) и выполнить .... и дальше всё что в цикле.
Посетитель
small user social cms
Медаль
Сообщений: 779
Странник, Loadырь, спасибо огромное, не знал что так можно smile
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1981
Gumoff, вообще-то только так и нужно - и никак иначе)))
вы допустили распространенную ошибку - не прочитали про область определения переменной.
для циклов внутренние переменные определены только внутри циклов...
Если у вас, к примеру, пять вложенных циклов, вы просто обязаны определить пять управляющих переменных с пятью разными именами. При этом эти внутренние переменные ни в коем случае не должны совпадать с именами переменных, которые существуют вне циклов. иначе при выхода из цикла эти переменные уничтожатся.
Редактировалось: 1 раз (Последний: 16 ноября 2015 в 14:34)
NOP
Посетитель
small user social cms
Медаль
Сообщений: 779
Интересно, то есть если вне массива есть глобальная переменная $record, то она сейчас уничтожена у меня?

Почитал про Область видимости переменной
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1981
Gumoff:
если вне массива есть глобальная переменная $record, то она сейчас уничтожена у меня?
При объявлении цикла вы ее переопределяете. При выходе из цикла она уничтожается. Вот почему у вас в первом примере вся машинерия доезжала только до конца второго цикла.
NOP
В начало страницы
Предыдущая темаСледующая тема Перейти на форум: