PHP:在数组中查找数组,不进行循环

时间:2014-01-20 04:50:53

标签: php multidimensional-array

我有一个简单的布尔数组数组,如下所示:

array(
    array('dog' => true),
    array('cat' => true),
    array('bird' =>false),
    array('fish' => true)
)

如何在没有循环结构的情况下找到一个条目,例如'cat'?我想我应该能够通过php数组函数实现这一目标,但解决方案正在逃避我!我只是想知道'cat'是否是一个有效的密钥 - 我对它的价值不感兴趣。

在上面的例子中,'cat'应该返回true,而'turtle'应该返回false。

3 个答案:

答案 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

Ideone

答案 1 :(得分:1)

你可以这样做:

  1. 使用array_reducearray_merge PHP函数的组合将数组缩减为单维数组。
  2. 在简化数组中,使用array_key_exists查找密钥。
  3. 你的阵列:

    $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_columncount 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检查密钥是否存在。

如果必须使用当前的数组结构,那么循环是唯一可以检查的方法。