搜索数组元素的子数组以检查特定键的值的最有效方法是什么?例如,给定以下数组,我想检查两个子数组"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手册。