Я предполагаю, что проблема возникает, когда вы встречаете строку верхнего уровня из таблицы (строка без родителя).Когда вы обрабатываете одну из этих строк, $parent
является нулем, и это условное срабатывание:
if (!array_key_exists($parent,$tree)) {
$tree[$parent][$id] = $id;
}
Здесь $parent
равно нулю, что интерпретируется как 0, который не является ключом, существующим в $parent
(по крайней мере, не в первый раз, когда вы сталкиваетесь с такой строкой), так что это приводит к созданию $tree[0]
.В вашем случае первая строка, где parent
- это ноль, - это строка с id = 1
, следовательно, $tree[0]
- это array(1 => 1)
.
Измените вышеприведенное условие на следующее:
if (!array_key_exists($parent,$tree) and !is_null($parent)) {
или если ваша оболочка БД не использует тип PHP null
для представления значений SQL NULL
, используйте что-то вроде этого:
if (!array_key_exists($parent,$tree) and $parent != 0) {