【问题标题】:Search sub arrays for specific key [duplicate]搜索特定键的子数组[重复]
【发布时间】:2013-03-10 23:22:19
【问题描述】:

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

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

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

我现在只有循环和检查,感觉很笨重。

【问题讨论】:

  • whathaveyoutried.com / 给我们看一些真实的代码...
  • 一种或另一种形式的循环是这样做的方式......
  • 一些用户将此标记为重复,但它所链接的“如何在 PHP 中的多维数组中按键 => 值搜索”问题是一个非常不同类型的问题(一个深度嵌套数组,需要递归解决方案)。这个问题似乎要求一个简单的循环,只检查一层深度的子元素。

标签: php arrays


【解决方案1】:

我不知道“最”高效,但这不一定要遍历整个数组,因为它会在找到的第一个值上打破循环,因此在技术上更有效。

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

好的...因为一些 meager cmets 没有附带替代建议 - 你可以尝试使用一些 PHP>5.3 - 我真的看不出它会如何 more高效虽然 - 它仍然必须在某种程度上循环遍历数组(但我不能 100% 确定 PHP 解释器的内部工作 - 也许有一些内部魔法可以加快速度),所以这个可能是纯粹的审美:

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

...如果效率低下的话。 通过数组“循环”并没有错 - 这是一种久经考验的语言结构,从数字时代开始就已经存在(几乎)。

【讨论】:

  • 你只是在“循环和检查”。您重新创建了 OP 已经说过的答案,但没有回答他们实际提出的问题。
  • “我现在只是循环检查,感觉很笨重。”
  • 不管它“感觉笨重”,这对于 PHP 中的这个特殊问题来说是一个很好的解决方案。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 2013-03-08
    • 1970-01-01
    • 2021-12-12
    • 2017-05-14
    相关资源
    最近更新 更多