PHP - array_search()失败=== true,但没有开启!== false?

时间:2012-04-24 08:23:28

标签: php arrays

当我想检查数组中是否有东西并取回密钥时,我使用array_search()函数。

为什么当我比较函数完全等于true(=== true)时它返回false,当我将它与不完全等于false(!== false)时它返回true? / p>

<?php
    if(array_search($value, $array) === true)
    {
        // Fails
    }

    if(array_search($value, $array) !== false)
    {
        // Succeeds
    }
?>

提前致谢。

4 个答案:

答案 0 :(得分:8)

找到匹配项后,

array_search会返回针头。只有在找不到匹配时才返回false。这就是为什么在您的情况下只有相反的情况。

  

如果在数组中找到,则返回针的键,FALSE   否则。

答案 1 :(得分:1)

晚会,但想添加一些上下文/示例:

array_search将返回(如果找到值) - 可能是0 - 并且如果值为FALSE >未找到。它从不返回TRUE

此代码可以更好地总结:

// test array...
$array = [
    0   => 'First Item',
    1   => 'Second Item',
    'x' => 'Associative Item'
];

// example results:
$key = array_search( 'First Item', $array );       // returns 0
$key = array_search( 'Second Item', $array );      // returns 1
$key = array_search( 'Associative Item', $array ); // returns 'x'
$key = array_search( 'Third Item', $array );       // returns FALSE

由于0是假名值,因此您不希望执行if ( ! array_search(...) ) {之类的操作...因为它会在0索引项上失败。

因此,使用它的方式如下:

$key = array_search( 'Third Item', $array ); // returns FALSE
if ( FALSE !== $key ) {
    // item was found, key is in $index, do something here...
}

值得一提的是,strposstripos这样的功能也是如此,所以养成跟随习惯是一种很好的模式。

答案 2 :(得分:0)

array_search()不会返回true。

如果只返回 false ,如果找不到任何内容,否则会返回匹配元素的键。

根据manual

  

array_search - 在数组中搜索给定值,如果成功则返回相应的键   ....

     

如果在数组中找到针,则返回针的键,否则返回FALSE。

答案 3 :(得分:0)

它会失败,因为如果调用成功,则返回密钥no true。

如果找不到

false,则返回false = = false is ok

来自手册:

  

如果在数组中找到针,则返回针的键,否则返回FALSE。