2

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

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

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

我目前所拥有的只是循环和检查,感觉很笨拙。

4

2 回答 2

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

...如果效率低下的话。 通过数组“循环”并没有错——它是一种久经考验的语言结构,自数字时代(几乎)出现以来就一直存在。

于 2013-03-21T12:45:42.537 回答
-1

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

于 2013-03-21T14:42:37.667 回答