Проект Gleez написан на основе Kohana. Я использую его для изучения. У меня есть некоторые вопросы о том, как работает следующий код. Он используется для генерации дерева из заданной информации, а затем рекурсивная функция использует это сгенерированное дерево для создания структуры.Объяснение функции от проекта Gleez
я дать результата запроса $ дерево к функции, которая содержит родительский идентификатор = PID Цикл проходит через каждый пункт проверки, если PID установлено (с помощью IsSet), и если да, то добавляется пустой массив $ D [ «детей» ] к текущему элементу. Ссылка используется для изменения значения элемента в цикле foreach.
Мой вопрос в том, почему ссылка используется, потому что даже если isset является ложным пустым массивом $ d ['children'] добавлен? Наверное, я просто не понимаю, как использовать эту функцию. 2.Why моей simplifyed функции без ссылки по-прежнему делает добавить $ пункта [ 'дети'], где PID = Null
private function generate_tree($tree) { $menu = array(); $ref = array(); foreach($tree as $d) { $d['children'] = array(); if(isset($ref[$d['plid']])) { // we have a reference on its parent $ref[ $d['plid'] ]['children'][ $d['mlid'] ] = $d; $ref[ $d['mlid'] ] =& $ref[ $d['plid'] ]['children'][ $d['mlid'] ]; } else { // we don't have a reference on its parent => put it a root level $menu[$d['mlid']] = $d; $ref[$d['mlid']] =& $menu[$d['mlid']]; // both pointing to the mlid } } return $menu;
}
Я simplifyed функции просто добавить $ пункта [ 'дети «]; для получения $ tree, если установлен родительский идентификатор. Я передаю функции generate_tree эти параметры.
array(4){
[0]=> array(2)
{
["id"]=> string(1) "2"
["pid"]=> NULL
}
[1]=> array(2)
{
["id"]=> string(1) "3"
["pid"]=> NULL
}
[2]=> array(2)
{
["id"]=> string(1) "6"
["pid"]=> string(1) "2"
}
[3]=> array(2)
{
["id"]=> string(1) "8"
["pid"]=> string(1) "3"
}
}
private function generate_tree($menu) {
$tree = array();
foreach ($menu as $item) {
$item['children'] = array();
if (isset($tree[$item['pid']])){
$tree[$item['pid']['children']] = $item;
}
else{
$tree[$item['pid']] = $item;
}
}
return $tree;
}
Результат: $ tree. Как вы видите ["pid"] => Null, но еще добавлен $ item ['children'].
array(3) {
[""]=> array(3)
{
["id"]=> string(1) "3"
["pid"]=> NULL
["children"]=> array(0) { }
}
[2]=> array(3)
{
["id"]=> string(1) "6"
["pid"]=> string(1) "2"
["children"]=> array(0) { }
}
[3]=> array(3)
{
["id"]=> string(1) "8"
["pid"]=> string(1) "3"
["children"]=> array(0) { }
}
}
Заранее спасибо!
Вы пытались удалить ссылку и проверить, что произойдет, если вы это сделаете? Иногда лучше всего засвидетельствовать, что происходит :) –
Да, я упростил код, удалил ссылку, i –
Я подстегнул, чтобы исправить свой вопрос, потому что это мой первый вопрос, и я полагаю, что это не самый лучший. –