2015-09-25 56 views
1

我们试图从函数内部调用相同的函数,但它不起作用。

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

请问有人能解释一下吗?

这里是我们的代码,如果你想看看:

$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,不管我们给什么样的输入。

+0

我没有看到&$ result或您在代码中讨论的递归函数。 –

+0

抱歉打字错误!现在修复它@SanderBackus –

回答

1

根据不同的PHP版本和您正在使用的数据类型,当你调用函数PHP创建数据的副本。该副本在该功能内使用。当您现在修改数据时,副本将被修改。稍后当您的通话结束时,副本将被删除(在每个递归步骤中的每个功能调用中)。操作&可以避免复制并发送引用。将不会创建副本。参考运算符也可以在函数参数中用于返回值,但在函数参数中更常见。

2

尝试从函数返回$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; 
+1

试过!它仍然无法正常工作... –

+0

您是否尝试过**&** $ _SESSION ['items'] [....? – SatanicGeek

+0

在哪个$ _SESSION?它甚至不会编译,如果我把它放在foreach中($ _SESSION ['items'] ... as $ childID) –

相关问题