【问题标题】:how to add an array value using array push on reqursive function php如何在递归函数php上使用数组推送添加数组值
【发布时间】:2016-06-30 09:47:35
【问题描述】:

我正在尝试解决这个分支树搜索,我想在 1 个变量数组中收集分支的所有值,问题是,分支函数在有很多时只返回 2 个值有价值,实际上我正在使用 Codeigniter。

这是我的父函数:

$data['left'] = array();
    $data['right'] = array();
    $c=array();
    foreach ($root as $r){
        if ($r->branch_status=="L"){
            array_push($data['left'], array($r->member_id, $r->member_name, $r->member_phone));
            $c = $this->branch($r->member_id);
            for ($i=0; $i<count($c); $i++){
              echo "array member : ".$c[$i][0]."<br>";
            }
        } else if ($r->branch_status="R"){
            array_push($data['right'], array($r->member_id, $r->member_name, $r->member_phone));
            $c = $this->branch($r->member_id);
            for ($i=0; $i<count($c); $i++){
              echo "array member : ".$c[$i][0]."<br>";
            }
        }
    }

这是我的分支功能:

public function branch($id){
    $br = array();
    $branch = $this->M_member->member($id);
    foreach ($branch as $b){
        if (empty($b)){
           echo "empty member";
        } else{
            array_push($br,array($b->member_id,$b->member_phone));
            $this->branch($b->member_id);
        }
    }
    for ($i=0; $i<count($br); $i++){
        echo "array member : ".$br[$i][0]." phone : ".$br[$i][1]."<br>";
    }
   return $br;
}

【问题讨论】:

  • 我没有仔细阅读代码,但通常对于这类问题,错误在$this-&gt;branch($b-&gt;member_id); 附近 - 你没有对这个调用的返回值做任何事情,所以它丢失了。
  • 试试 array_push(&$br, array($b->member_id,$b->member_phone));。检查是否工作
  • 编译出错,报错“Call-time pass-by-reference has been removed”

标签: php arrays codeigniter recursion array-push


【解决方案1】:

主要原因是分支函数中 $br 的局部声明。这应该工作

public function branch($id, &$br=array()){

    $branch = $this->M_member->member($id);

    foreach ($branch as $b){
        if (empty($b)){
            echo "empty member";
        } else{
            //array_push($br,array($b->member_id,$b->member_phone));
            $br[] = array($b->member_id,$b->member_phone);
            $this->branch($b->member_id, $br);
        }
    }
    return $br;
}

【讨论】:

  • 不行,在这种情况下,递归函数只是得到1个值,递归后加1个值,我试过正常使用for(),不使用array_push插入值,但还是一样
  • 我已对其进行了修改,以便通过引用传递数组。这应该工作得很好!我在普通的 PHP 函数中对其进行了测试。它在那里工作,所以希望它应该工作。
猜你喜欢
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多