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

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 16 ноября 2015 в 13:15
значения двумерного массива из-за внутреннего перестают передаваться, помогите решить что не так
  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'] пустые.
Если внутренний массив удалить, то все значения выводятся нормально.
#2 16 ноября 2015 в 13:29
6 строчка — видимо, не $items, а $item?
7. строчка — вы пытаетесь во внутреннем цикле определить управляющую переменную $item, хотя она определена уже во внешнем цикле на 2 строчке
8. строчка — в ссылке не определен href. на перебор значений массива не влияет, но не кошерно))
#3 16 ноября 2015 в 13:34

6 строчка — видимо, не $items, а $item?

Странник
скорее $item['items'] и согласен с коллегой по поводу переменной во внутреннем массиве. Надо переделать её.
#4 16 ноября 2015 в 13:38


6 строчка — видимо, не $items, а $item?
7. строчка — вы пытаетесь во внутреннем цикле определить управляющую переменную $item, хотя она определена уже во внешнем цикле на 2 строчке
8. строчка — в ссылке не определен href. на перебор значений массива не влияет, но не кошерно))

Странник
6.ю можно удалить она не влияет
7. да но нужно вытащить именно все $item['items'] не знаю как по другому
#5 16 ноября 2015 в 13:41


6 строчка — видимо, не $items, а $item?

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

Loadырь


  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.  
делаю так — ничего не меняется, внутренний цикл отрабатывает на ура.
#6 16 ноября 2015 в 13:42
  1. <?php foreach($item['items'] as $record) { ?>
  2. <a ><?php echo $record['title']; ?></a>
  3.  
  4. <?php } ?>
не?

было бы еще хорошо определение двумерного массива, который мы тут обрабатываем, увидеть для начала.
#7 16 ноября 2015 в 13:59


  1.  
  2.  
  3.  
  4.  
не?

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

Странник

Ура!!! $record сработало как надо, осталось только недоумение что такое $record

Спасибо огромное!

Странник
#8 16 ноября 2015 в 14:05

что такое $record

Gumoff
управляющая переменная внутреннего цикла. когда вы ее назвали так же, как и управляющую переменную внешнего, тем самым ее переопределили. поэтому после завершения внутреннего цикла внешний не смог работать — управляющая переменная ведь при выходе из цикла разустанавливается. другими словами, она существует только внутри цикла.
так что все просто
#9 16 ноября 2015 в 14:07


что такое $record

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

Странник

Спасибо я понял наконец, но $record ведь нигде не определена была до этого, как она сработала?!
Или она просто временная получается и отрабатывает только на внутренний цикл.
#10 16 ноября 2015 в 14:13
да. она определяется только для внутреннего цикла в его заголовке:
foreach($items as $blabla) {...}
$blabla существует только внутри тела цикла. вне цикла она попросту не определена. нет ее там)))))
#11 16 ноября 2015 в 14:18

но $record ведь нигде не определена была до этого, как она сработала?!

Gumoff
Перевожу на русский
  1. <?php foreach($item['items'] as $record) { ?>
каждое значение переменной $item['items'] рассматривать как переменную $record (вот тут мы её и объявили) и выполнить… и дальше всё что в цикле.
#12 16 ноября 2015 в 14:27
Странник, Loadырь, спасибо огромное, не знал что так можно smile
#13 16 ноября 2015 в 14:31
Gumoff, вообще-то только так и нужно — и никак иначе)))
вы допустили распространенную ошибку — не прочитали про область определения переменной.
для циклов внутренние переменные определены только внутри циклов...
Если у вас, к примеру, пять вложенных циклов, вы просто обязаны определить пять управляющих переменных с пятью разными именами. При этом эти внутренние переменные ни в коем случае не должны совпадать с именами переменных, которые существуют вне циклов. иначе при выхода из цикла эти переменные уничтожатся.
#14 16 ноября 2015 в 14:42
Интересно, то есть если вне массива есть глобальная переменная $record, то она сейчас уничтожена у меня?

Почитал про Область видимости переменной
#15 16 ноября 2015 в 14:46

если вне массива есть глобальная переменная $record, то она сейчас уничтожена у меня?

Gumoff
При объявлении цикла вы ее переопределяете. При выходе из цикла она уничтожается. Вот почему у вас в первом примере вся машинерия доезжала только до конца второго цикла.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.