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

PHP:在数组中查找数组,不循环,php,multidimensional-array,Php,Multidimensional Array,我有一个简单的布尔数组,如下所示: array( array('dog' => true), array('cat' => true), array('bird' =>false), array('fish' => true) ) 如果没有循环构造,如何查找条目,例如“cat”?我想我应该可以用php数组函数来实现这一点,但解决方案却在我眼前!我只是想知道‘cat’是否是一个有效的键——我对它的值不感兴趣 在上面的例子中,“cat”应该返

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

array(
    array('dog' => true),
    array('cat' => true),
    array('bird' =>false),
    array('fish' => true)
)
如果没有循环构造,如何查找条目,例如“cat”?我想我应该可以用php数组函数来实现这一点,但解决方案却在我眼前!我只是想知道‘cat’是否是一个有效的键——我对它的值不感兴趣


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

这是一种荒谬的存储密钥的方法。如果每个键只有一个元素,那么将其自身设置为一个数组是没有意义的

做我认为你想做的事情的一个更明智的方法是:

$myArray = array(
    'dog' => true,
    'cat' => true,
    'bird' => false,
    'fish' => true)
)
在这种情况下,您可以使用检查键是否存在

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

$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;
}


您可以这样实现:

  • 使用和PHP函数的组合将数组减少为一维数组
  • 在简化数组中,使用查找键
  • 您的阵列:

    $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';    // turtle
    
    $result = ( count ( array_column( $yourArray ,'cat' ) ) > 0 ) ? true : false;
    
    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>5.5.0

    您可以使用和PHP函数的组合来实现它:

    用于检查密钥是否存在的代码:

    $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';    // turtle
    
    $result = ( count ( array_column( $yourArray ,'cat' ) ) > 0 ) ? true : false;
    
    var_dump( $result );
    

    上面用PHP5.5.5测试的代码是

    为什么害怕循环?简单的解决方案…不回答问题。
    turtle
    如何符合这个答案?