php函数在php中不返回数组

php函数在php中不返回数组,php,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",

我创建了一个函数,如下所示:

<?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;
    }
}
?>

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

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

否则,在该行之后,函数将退出而不返回

添加:

要转换为循环,请执行以下操作:

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在这种情况下会做什么)。

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

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

否则,在该行之后,函数将退出而不返回

添加:

要转换为循环,请执行以下操作:

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在这种情况下会做什么).

如果前两个If为true,则函数不返回任何内容。

如果前两个If为true,则函数不返回任何内容。

您可能需要为输入
$ids
和输出
$ids
使用不同的名称,这可以重写为一个简单的循环-无需涉及代价高昂的递归。您可能需要为输入
$ids
和输出
$ids
使用不同的名称。此外,这可以重写为一个简单的循环-无需涉及代价高昂的递归。@PradipChitrakar-将其重写为一个循环。它会简单得多,因此更难搞砸。如何使用循环实现这一点?任何暗示。我要把一个孩子的父母都找来child@PradipChitrakar-我编辑了这篇文章,看看吧。想法很简单,就是在每次迭代结束时,将
$childId
设置为
$row['parent\u id']
,然后重新开始。@PradipChitrakar-将其重写为循环。它会简单得多,因此更难搞砸。如何使用循环实现这一点?任何暗示。我要把一个孩子的父母都找来child@PradipChitrakar-我编辑了这篇文章,看看吧。想法很简单,在每次迭代结束时,您将
$childId
设置为
$row['parent\u id']
,然后重新开始。