Функция выводит массив 0 элементов из ниоткуда - PullRequest
1 голос
/ 22 ноября 2011

Вывод функции выглядит хорошо, но я получаю дополнительные [0] => Array ( [1] => 1 ) из ниоткуда. Идентификаторы начинаются с 1 в моей таблице БД. Откуда появляется 0?!

Array ( [1] => Array ( [name] => Sual [parent] => 0 ) **[0] => Array ( [1] => 1 )** ...

Вот функция

<?php

function treeGen($menu, $utype) {
    global $db;
    $tree = array();
    $stmt = $db->prepare("select id, parent, name FROM navigation WHERE menu=? AND user_type=?") or die($db->error);
    $stmt->bind_param("ii", $menu, $utype) or die($stmt->error);
    $stmt->execute() or die($stmt->error);
    $stmt->store_result();
    $meta = $stmt->result_metadata();
    $stmt->bind_result($id, $parent, $name);
    while ($stmt->fetch()) {
        $tree[$id] = array(
            'name' => $name, 
            'parent' => $parent
        );
        if (!array_key_exists($parent,$tree)) {
            $tree[$parent][$id] = $id;
        }
    }
    $stmt->close();
   print_r($tree);
}

?>

Ответы [ 2 ]

1 голос
/ 22 ноября 2011

Я предполагаю, что проблема возникает, когда вы встречаете строку верхнего уровня из таблицы (строка без родителя).Когда вы обрабатываете одну из этих строк, $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) {
0 голосов
/ 22 ноября 2011

что-то идет не так в

if (!array_key_exists($parent,$tree)) {
        $tree[$parent][$id] = $id;

я думаю.попробуйте комментировать этот код, а затем выведите массив $ tree

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...