搜索子数组以获取特定键

时间:2013-03-21 12:35:39

标签: php arrays

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

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

            [3] => Array
                (
                    [id] => 24876
                    [msg] => 
                )
        )

我现在所拥有的只是循环和检查,感觉非常笨重。

2 个答案:

答案 0 :(得分:0)

我不知道“最”效率,但这不一定要遍历整个数组,因为它会破坏第一个找到的值的循环,所以从技术上来说效率更高。

 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']); })));

......如果效率低下的话。 通过数组“循环”没有任何问题 - 它是一个久经考验的语言结构,自数字时代(几乎)开始以来一直存在。

答案 1 :(得分:-1)

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