php函数没有在php中返回数组

时间:2013-03-13 07:36:10

标签: php

我创建了一个函数如下:

<?php
$cat_id=2;
$ids=array();
$ids[]=2;
var_dump(fetchParents($cat_id,$ids));
function fetchParents($cat_id,$ids){
    $db=mysql_connect("localhost","root","") or die("could not connect to database");
    mysql_select_db("symfony",$db) or die("could not connect to symfony database");
    $query="SELECT parent_id FROM categories WHERE id='$cat_id'";
    $result=mysql_query($query,$db);
    if (mysql_num_rows($result)==1) {
        $cat=mysql_fetch_array($result);
        if (isset($cat['parent_id'])) {
             $ids[]=$cat['parent_id'];
             fetchParents($cat['parent_id'],$ids);
        }
        else {
            var_dump($ids);
            return $ids;
        }

    }
    else {
        return $ids;
    }
}
?>

该函数应返回一个数组,但我得到null,我确定$ ids是一个数组。我还检查了在返回数组的函数中使用var_dump($ ids)。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:3)

在退出函数之前,有一个控制流不执行return语句。你需要改变

fetchParents($cat['parent_id'],$ids);

return fetchParents($cat['parent_id'],$ids);

否则在该行之后,函数退出而没有return

<强>加了:

要转换为循环:

function fetchParents($childId)
{
    $ids = array();

    $db=mysql_connect("localhost","root","") or die("could not connect to database");
    mysql_select_db("symfony",$db) or die("could not connect to symfony database");

    while (true)
    {
        $res = mysql_query("SELECT parent_id FROM categories WHERE id=$childId");
        $row = mysql_fetch_assoc($res);
        if (is_null($row['parent_id']) )
            return $ids;
        $ids[] = $row['parent_id'];
        $childId = $row['parent_id'];
    }
}

顺便说一句 - 我在原始示例中看到,您也将起始元素的ID添加到数组中。如果是这样,那么它可以变得更加优雅:

function fetchParents($childId)
{
    $ids = array();

    $db=mysql_connect("localhost","root","") or die("could not connect to database");
    mysql_select_db("symfony",$db) or die("could not connect to symfony database");

    while (!is_null($childId))
    {
        $ids[] = $childId;
        $res = mysql_query("SELECT parent_id FROM categories WHERE id=$childId");
        $row = mysql_fetch_assoc($res);
        $childId = $row['parent_id'];
    }
    return $ids;
}

请注意,当SELECT查询未返回任何行时,这两个都不处理。我认为这是不会发生的事情,因为你是通过ID选择的。但是,如果有可能,那么您还需要检查$row === false,否则您将收到大量警告/错误消息(不确定PHP在这种情况下会做什么)。

答案 1 :(得分:0)

如果两个第一个IF为真,那么该函数不会返回任何内容。