我有一个简单的布尔数组数组,如下所示:
array(
array('dog' => true),
array('cat' => true),
array('bird' =>false),
array('fish' => true)
)
如何在没有循环结构的情况下找到一个条目,例如'cat'?我想我应该能够通过php数组函数实现这一目标,但解决方案正在逃避我!我只是想知道'cat'是否是一个有效的密钥 - 我对它的价值不感兴趣。
在上面的例子中,'cat'应该返回true,而'turtle'应该返回false。
答案 0 :(得分:1)
$array = array(
array('dog' => true),
array('cat' => true),
array('bird' =>false),
array('fish' => true)
);
array_walk($array,'test_array');
function test_array($item2, $key){
$isarray = is_array($item2) ? 'Is Array<br>' : 'No array<br>';
echo $isarray;
}
使用手册中的array_walk示例
输出:
Is Array
Is Array
Is Array
Is Array
答案 1 :(得分:1)
你可以这样做:
你的阵列:
$yourArray = array
(
array( 'dog' => true )
,array( 'cat' => true )
,array( 'bird' =>false )
,array( 'fish' => true )
);
检查密钥是否存在的代码:
$itemToFind = 'cat'; // turtle
$result =
array_key_exists
(
$itemToFind
,array_reduce(
$yourArray
,function ( $v , $w ){ return array_merge( $v ,$w ); }
,array()
)
);
var_dump( $result );
检查密钥是否退出并检索其值的代码:
$itemToFind = 'cat'; // bird
$result =
array_key_exists
(
$itemToFind
,$reducedArray = array_reduce(
$yourArray
,function ( $v , $w ){ return array_merge( $v ,$w ); }
,array()
)
) ?$reducedArray[ $itemToFind ] :null;
var_dump( $result );
使用PHP&gt; 5.5.0 强>
您可以使用array_column和count PHP函数的组合来实现它:
检查密钥是否存在的代码:
$itemToFind = 'cat'; // turtle
$result = ( count ( array_column( $yourArray ,'cat' ) ) > 0 ) ? true : false;
var_dump( $result );
上面使用PHP 5.5.5测试的代码是here
答案 2 :(得分:-1)
这是一种存储密钥的荒谬方式。如果每个键只有一个元素,那么就没有必要让它们成为一个数组。
做我认为你想做的更明智的方式是:
$myArray = array(
'dog' => true,
'cat' => true,
'bird' => false,
'fish' => true)
)
在这种情况下,您可以使用array_key_exists
检查密钥是否存在。
如果必须使用当前的数组结构,那么循环是唯一可以检查的方法。