函数从无处输出数组0个元素

时间:2011-11-22 08:47:35

标签: php mysql arrays prepared-statement

该函数的输出看起来不错,但我每次都无法获得额外的[0] => Array ( [1] => 1 )。 id在我的db表中从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 个答案:

答案 0 :(得分:1)

我想当你遇到表中的顶级行(没有父级的行)时会出现问题。当您处理其中一行时,$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) {

答案 1 :(得分:0)

中出现了问题
if (!array_key_exists($parent,$tree)) {
        $tree[$parent][$id] = $id;
我认为。尝试评论此代码,然后打印数组$ tree