【问题标题】:PHP function - screening array sanity checkPHP 函数 - 筛选数组完整性检查
【发布时间】: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


【解决方案1】:

这一切都可以通过array_intersect()array_keys() 高效完成。

代码(Demo):

$tmp = ['fff'=>111,'aaa'=>100,'ddd'=>99,'ccc'=>87,'eee'=>45,'bbb'=>3,'ggg'=>1];
$prg = ['bbb','ccc'];

echo "1st Key: ",(sizeof($result=array_intersect(array_keys($tmp),$prg))==0?"Not Found":current($result));
echo "\n\nResult Array: ";
var_export($result);

输出:

1st Key: ccc

Result Array: array (
  3 => 'ccc',
  5 => 'bbb',
)

或者,如果您想获取第一个匹配项的值:

var_export(current(array_intersect_key($tmp,array_flip($prg))));
// Will ouput: 87
// if no matches, will return FALSE

【讨论】:

    猜你喜欢
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多