【问题标题】:Return last set of array from PHP recursive function从 PHP 递归函数返回最后一组数组
【发布时间】:2019-01-12 15:49:28
【问题描述】:

我正在尝试通过递归函数过滤一组数组,但过滤完成后无法返回它。

function get_the_answer($number, $array=array()){
 $returnArray = array();
 $QS = array(1=>'C', 2=>'B', 3=>'C', 4=>'D');
 $SL = array(
           1 => array(
                    'cb1' => array('A','B', 'D'),
                    'cb2' => array('B','C', 'D'),
                    'cb3' => array('A','C', 'B'),
                ),

            2 => array(
                    'cb1' => array('B','C','D'),
                    'cb2' => array('A','C','D'),
                    'cb3' => array('A','B','D'),
                ),

            3 => array(
                    'cb1' => array('E','C','D'),
                    'cb2' => array('B','E','D'),
                    'cb3' => array('A','C','D'),
                ),
            4 => array(
                    'cb1' => array('A','D','E'),
                    'cb2' => array('A','C','D'),
                    'cb3' => array('B','C','D'),
            )
 ); 
 if($number<=4){ 
        if(empty($array)){
          $returnedValue = return_filtered_company($SL[$number], $QS[$number]);
        } else {
          $returnedValue = return_filtered_company($array, $QS[$number]);
        }

        //print_r($returnedValue); -> receiving values nicely, need the last set of array which is 'cb3'

        $returnArray[] = $returnedValue; 

        $increment = $number+1;
        if($increment<=4){
            $result=array_intersect_key($SL[$increment], $returnedValue);
             get_the_answer($increment, $result);
        }
    }
  return $returnArray;
}

//function for company calculation 
function return_filtered_company($companyArray, $answer){
 $foundCB=array();

 if(is_array($companyArray) && count($companyArray)){
    foreach ($companyArray as $name => $arrayVal){
        if (in_array($answer, $arrayVal)) {
            $foundCB[$name]=$name;
        }
    }
 }

return $foundCB;
}

我这样调用应答函数:

$ans = get_the_answer(1);
    echo '<pre>';
    print_r($ans);
    echo '</pre>';

一切正常,但它返回的值发生在第一次递归而不是最后一次递归中。答案应该是cb3

请有人帮助找出返回最后一次递归的最佳解决方案。

【问题讨论】:

  • 如果你调用一个递归函数,你应该只使用它的返回值。目前你只有一个递归调用,但没有使用返回值
  • 你确定你想要一个递归函数而不仅仅是一个循环吗? (我不明白你想在这里做什么)
  • 嗨@Philipp 感谢您的回复:) 如果我想得到我上面提到的结果,最好的解决方案是什么?
  • @Jeff 没有必要运行递归函数,但我认为这是获得解决方案的最简单方法:( 目标是根据 $QS 值过滤 $SL 数组。这实际上是一个问题-回答我要过滤的解决方案。

标签: php arrays recursion


【解决方案1】:

替换第 42 行 get_the_answer($increment, $result);用return get_the_answer($increment, $result); 解决它。

See the screenshot

【讨论】:

  • 嗨@Pol_pm:我试过了。它返回第一次发生的计算..不是最后一个数组:(
  • 嗯,它对我有用。我在答案中添加了屏幕截图,请查看。
  • ahh..right (y) yes..它可以工作,但令人困惑的是它是如何工作的 ;)
猜你喜欢
  • 1970-01-01
  • 2015-04-27
  • 1970-01-01
  • 2013-08-07
  • 2021-08-14
  • 2011-03-29
  • 2019-04-25
  • 2021-08-07
  • 1970-01-01
相关资源
最近更新 更多