搜索数组元素的子数组以检查特定键值的最有效方法是什么?例如,给定以下数组,我想检查两个子数组“msg”值,如果填充了任何一个,则返回一个布尔结果:
[TGMN02] => Array
(
[2] => Array
(
[id] => 93143
[msg] =>
)
[3] => Array
(
[id] => 24876
[msg] =>
)
)
我现在所拥有的只是循环和检查,感觉非常笨重。
答案 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