为什么以及何时使用&$结果是PHP?

为什么以及何时使用&$结果是PHP?,php,function,Php,Function,我们试图从函数内部调用同一个函数,但它不起作用 我们相信有一个&$result变量应该放在某个地方,我们已经在其他人编写的代码的其他部分看到了它,但我们不知道它在哪里以及如何工作 有人能解释一下吗 如果您想查看,以下是我们的代码: $parentID = $_POST['id']; $choosenCategory = $_POST['choosenCategory']; $count = 0; function count_child($parentID, $choosenCategory)

我们试图从函数内部调用同一个函数,但它不起作用

我们相信有一个&$result变量应该放在某个地方,我们已经在其他人编写的代码的其他部分看到了它,但我们不知道它在哪里以及如何工作

有人能解释一下吗

如果您想查看,以下是我们的代码:

$parentID = $_POST['id'];
$choosenCategory = $_POST['choosenCategory'];
$count = 0;

function count_child($parentID, $choosenCategory){

    foreach($parentID as $thisID){

        foreach($_SESSION['items'][$thisID]['Children'] as $ChildID){

            $DatabaseID = $ChildID;
            $ItemCategory = $_SESSION['items'][$DatabaseID]['ItemCategory'];
            $ItemName = $_SESSION['items'][$DatabaseID]['ItemName'];
            $ItemStatus = $_SESSION['items'][$DatabaseID]['ItemStatus'];
            $ParentID = $_SESSION['items'][$thisID]['DatabaseID'];
            $Children = $_SESSION['items'][$DatabaseID]['Children'];
            $Dependencies = $_SESSION['items'][$DatabaseID]['Dependencies'];

            if($ItemCategory == $choosenCategory){
                $count++;
            }

            if($ItemCategory !== "RWP" && $ItemCategory !== "US" && $levels === "all"){
                $array = array();
                count_child($ChildID, $choosenCategory);    
            }
        }
}
}
count_child($parentID, $choosenCategory);
$json = json_encode($count);
echo $json;

无论我们输入什么,它总是输出0。

尝试从函数返回
$count

像这样:

$parentID = $_POST['id'];
$choosenCategory = $_POST['choosenCategory'];

function count_child($parentID, $choosenCategory){

    $count = 0;

    foreach ($parentID as $thisID){

    $aChild = &$_SESSION['items'][$thisID]['Children'];

        foreach ($aChild as $ChildID){

            $DatabaseID  = $ChildID;
            $ItemCategory    = $_SESSION['items'][$DatabaseID]['ItemCategory'];
            $ItemName        = $_SESSION['items'][$DatabaseID]['ItemName'];
            $ItemStatus  = $_SESSION['items'][$DatabaseID]['ItemStatus'];
            $ParentID        = $_SESSION['items'][$thisID]['DatabaseID'];
            $Children        = $_SESSION['items'][$DatabaseID]['Children'];
            $Dependencies    = $_SESSION['items'][$DatabaseID]['Dependencies'];

            if ($ItemCategory == $choosenCategory){
                $count++;
            }

            if ($ItemCategory !== "RWP" && $ItemCategory !== "US" && $levels === "all"){
                $array = array();
                paint_child($ChildID, $choosenCategory);
            }
        }
    }

    return $count;

}

$count   = count_child($parentID, $choosenCategory);
$json    = json_encode($count);
echo $json;

根据php版本和使用的数据类型,php会在调用函数时创建数据的副本。该副本在该函数中使用。现在修改数据时,副本将被修改。稍后当调用完成时,副本将被删除(在每个递归步骤中的每个函数调用中)。该操作避免复制并发送引用(&O)。不会创建任何副本。引用运算符也可以在函数参数中的返回值中使用,但在函数参数中更常见。

我在代码中没有看到&$result或您正在谈论的递归函数。很抱歉,键入错误!现在修复了@sanderbackus在哪个$\u会话上的问题?如果我把它放在foreach($\u SESSION['items']…作为$childID)中,它甚至不会编译