我可以在没有循环的情况下检查php多维数组的特定键的值,我的php版本在5.4.31中

时间:2014-09-26 09:45:25

标签: php arrays multidimensional-array

我的数组是......

array(2) {
  ["dialog"]=>
   {
    ["enableAll"]=> "true"
    ["loginEnable"]=>"true"
    ["sharingEnable"]=> "false"
    ["keys"]=>
         {
      ["dialogCGkey"]=>"eef163af-3af3-48ee-9cc1-1830ded5e058"
     }
  }
  ["facebook"]=>
  {
    ["enableAll"]=> "true"
    ["loginEnable"]=>"true"
    ["sharingEnable"]=> "false"
    ["keys"]=>
             {
      ["appId"]=>"1406394902958121"
      ["secret"]=> "964594a90ca5140221b43c4e6dfc71c7"
      ["sdkVersion"]=>"v2.0"
    }
  }
}

我需要检查至少一个键“enableAll”的值是否为“false”,而不是循环...

4 个答案:

答案 0 :(得分:3)

您可以使用array_filter()来获得符合特定条件的简化数组:

$oneFalseEnableAll = (bool) array_filter($myArray, function($arr) {
    return 'false' === $arr['enableAll'];
});

这会将$myArray保留为完整的原始数组,并且所有enableAll = true值仍然存在。如果您想使用简化数组覆盖它,您可以这样做:

$myArray = array_filter($myArray, function($arr) {
    return 'false' === $arr['enableAll'];
});

答案 1 :(得分:0)

没有循环这样做有点难,你需要某种递归函数/方法。 但是,如果你真的不想循环,你只需要知道那里是否有真可以尝试展平(使用spl_lib)但它可能会产生意想不到的结果:

$output = iterator_to_array(new RecursiveIteratorIterator(
    new RecursiveArrayIterator($input)), FALSE);
$out = array_search('true', $output);

答案 2 :(得分:0)

$hasFalse = array_reduce($array, function ($hasFalse, array $data) {
    return $hasFalse || $data['enableAll'] == 'false';
});

这仍然会在幕后循环,但你去了......

答案 3 :(得分:0)

如果你知道你的数组只包含两个条目,你可以硬编码

if($arrayName['dialog']['enableAll'] == "false"  || $arrayName['facebook']['enableAll'] == "false")
(
    //At least one value is false
)

如果您有两个以上的条目,可能是时候使用循环了。从理论上讲,你可以根据自己的喜好进行硬编码,但是在两三个条目之后编写一个循环的工作就会减少,如果你需要改变它的工作方式,循环就更容易维护