Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在不循环的情况下检查php多维数组的特定键的值吗?我的php版本是5.4.31_Php_Arrays_Multidimensional Array - Fatal编程技术网

我可以在不循环的情况下检查php多维数组的特定键的值吗?我的php版本是5.4.31

我可以在不循环的情况下检查php多维数组的特定键的值吗?我的php版本是5.4.31,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我的数组是 array(2) { ["dialog"]=> { ["enableAll"]=> "true" ["loginEnable"]=>"true" ["sharingEnable"]=> "false" ["keys"]=> { ["dialogCGkey"]=>"eef163af-3af3-48ee-9cc1-1830ded5e058" } } ["faceb

我的数组是

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"
    }
  }
}
我需要检查至少一个键“enablell”的值为“false”,而不循环…

您可以使用它来获得符合特定条件的精简数组:

$oneFalseEnableAll = (bool) array_filter($myArray, function($arr) {
    return 'false' === $arr['enableAll'];
});
这将使
$myArray
保留为完整的原始数组,所有
enableAll=true
值仍保留。如果要使用精简数组覆盖它,只需执行以下操作:

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

在没有循环的情况下执行此操作有点困难,您需要某种递归函数/方法。 但是,如果您真的不想循环,您只需要知道其中是否有一个真的循环,您可以尝试(使用spl_lib)将其展平,但这可能会产生意想不到的结果:

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

这仍然会在幕后循环,但你会发现…

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

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

如果您有两个以上的条目,那么可能是时候使用循环了。理论上,您可以随意硬编码,但在输入两到三个条目后,编写循环的工作量会减少,而且如果以后需要更改循环的工作方式,那么循环的可维护性也会大大提高

如果前几个条目为真,您打算如何在不循环的情况下执行此操作?难道你不需要“循环”直到你找到至少一个FALSE,然后你就可以退出循环吗?现在,如果所有的“enableAll”在数组中都有相同的值,那就不同了。是这样吗?不循环的随机限制是什么?我自己并没有否决这个问题,但如果你想知道为什么你会得到它们,答案很可能是因为“循环是做这件事的正确方式”。正如我在回答中提到的,如果你知道你只会有一个或两个条目,那么当然可以硬编码,但一般来说,多维数组应该使用循环进行操作。除了他想找到
false
,而不是
true
,这会不会发现
sharingEnable=>false
loginEnable=>true
?是的,但你可以随时检查密钥,我猜,将其与数组过滤器结合使用,它会在没有循环的情况下工作注意
empty
在这里是多余的/误用的,
(bool)数组过滤器(…)
会更合适。实际上这是真的,
empty
不起作用,因为它是一个表达式。我几乎用了
!!计数(至少不会被打破)。Cast to bool也是一种(可能更清洁的)解决方案
if($arrayName['dialog']['enableAll'] == "false"  || $arrayName['facebook']['enableAll'] == "false")
(
    //At least one value is false
)