【发布时间】:2017-09-17 15:09:32
【问题描述】:
我正在编写一个函数来循环遍历一个数组,直到找到基于另一个数组的匹配项。但是该值返回 null。
我的例子:
$i = 1;
$tmp = ['fff'=>111,'aaa'=>100,'ddd'=>99,'ccc'=>87,'eee'=>45,'bbb'=>3,'ggg'=>1];
$prg = ['bbb','ccc'];
function doFilter($tmp,$prg,$i) {
$second = array_slice($tmp, $i, 1);
$snd = key($second);
if (!in_array(strtolower($snd),$prg)) {
$i++;
doFilter($tmp,$prg,$i);
} else {
// echo ccc
echo $snd;
return $snd;
}
}
$snd = doFilter($tmp,$prg,$i);
// echo NULL
echo $snd;
任何想法为什么没有返回函数中的值来填充变量作为函数的响应?
【问题讨论】:
-
你为什么要递归地这样做?另外,您是否只是想查看 1
$prg是否在$tmp中,或者您想查看$tmp中的所有$prg? -
你不会从内部递归调用中返回值。你可能想要
return doFilter($tmp,$prg,$i); -
但真的:
array_intersect(array_keys($tmp), $prg) -
太棒了,谢谢!是的,没有返回递归循环。
-
但是是的,可能有一种更简单的方法可以做到这一点,尽管将一个数组中的键与另一个数组中的值进行比较。
标签: php arrays function filter