【发布时间】: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 数组。这实际上是一个问题-回答我要过滤的解决方案。