搜索子数组查找特定键


Search sub arrays for specific key

搜索数组元素的子数组以检查特定键的值的最有效方法是什么?例如,给定以下数组,我想检查两个子数组"msg"的值,如果其中一个已填充,则返回一个布尔结果:

[TGMN02] => Array
        (
            [2] => Array
                (
                    [id] => 93143
                    [msg] => 
                )
            [3] => Array
                (
                    [id] => 24876
                    [msg] => 
                )
        )

我现在所做的只是简单地循环遍历和检查,感觉相当笨拙。

我不知道"最"效率,但这并不一定要遍历整个数组,因为它会在找到的第一个值上打破循环,所以从技术上讲更有效率。

 function hasMsg($a){
   foreach($a as $b)
     if(!empty($b['msg'])) return true;
   return false;
 }

好吧…由于一些微不足道的注释没有提供替代建议-您可以尝试使用PHP>5.3 -我真的看不出如何更有效-它仍然必须在某种程度上循环遍历数组(但我不是100%确定PHP解释器的内部工作-也许有一些内部魔法可以加快速度),所以这可能纯粹是审美:

$hasMsg = !!(count(array_filter($a,function($b){ return !empty($b['msg']); })));

…如果效率更低的话。在数组中"循环"并没有什么错——这是一种久经考验的语言结构,几乎从数字时代开始就存在了。

首先编写一些自定义函数,然后尝试与array_walk_recursive(array &$input, callable $funcname [, mixed $userdata = NULL])函数一起使用。Php手册。