我的数组是…
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",而不是循环。。。
您可以使用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'];
});
在没有循环的情况下执行此操作有点困难,需要某种递归函数/方法。但是,如果你真的不想循环,并且你只需要知道其中是否有true,你可以尝试将其压平(使用spl_lib),但这可能会产生意想不到的结果:
$output = iterator_to_array(new RecursiveIteratorIterator(
new RecursiveArrayIterator($input)), FALSE);
$out = array_search('true', $output);
$hasFalse = array_reduce($array, function ($hasFalse, array $data) {
return $hasFalse || $data['enableAll'] == 'false';
});
这仍然会在幕后循环,但你可以。。。
如果你知道你的数组只包含两个条目,你可以硬编码它
if($arrayName['dialog']['enableAll'] == "false" || $arrayName['facebook']['enableAll'] == "false")
(
//At least one value is false
)
如果您有两个以上的条目,那么可能是时候使用循环了。理论上,你可以随心所欲地硬编码,但在两到三个条目之后,写一个循环就不那么容易了,而且如果你以后需要改变它的工作方式,这个循环就更容易维护了。