1

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

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

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

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

提前致谢。

4

4 回答 4

10

找到匹配项时, array_search 会返回针。仅当未找到匹配项时才返回 false。这就是为什么只有相反的情况适用于您的情况。

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

于 2012-04-24T08:24:53.917 回答
2

聚会迟到了,但想添加一些上下文/示例:

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等函数也是如此,因此这是养成遵循习惯的好模式。

于 2018-05-30T15:13:12.233 回答
0

array_search()不返回真。

If 只会返回false,如果它找不到任何东西,否则它将返回匹配元素的键。

根据说明书

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

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

于 2012-04-24T08:25:18.683 回答
0

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

如果没有找到则返回 false 所以 === false 是可以的

从手册:

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

于 2012-04-24T08:25:51.530 回答