2

在以下示例中,我无法理解array_search的结果(并且没有找到任何讨论此问题的现有问题):

<?php

    $values = array(
        15,
        12,
        "15",
        34,
        15 => 25,
        "xx" => 15
    );
    echo "PHP-Version is " . phpversion();
    echo "<h1>Array:</h1><pre>";var_dump($values);echo "</pre>";    

    // sort($values); // remove comment and 15 will be found in ALL cases!

    $key = array_search("15",$values);
        show_result('(a) Searching "15"');

    $key = array_search("15",$values,true);
        show_result('(b) Searching "15",true');

    $key = array_search(15,$values);
        show_result('(c) Searching 15');

    $key = array_search(15,$values,false);
        show_result('(d) Searching 15,false');

    $key = array_search(15,$values,true);
        show_result('(e) Searching 15,true');



function show_result($tit) {    
    global $key,$values;
    echo "<h2>$tit</h2>";

    if (!$key) { 
        echo "Not found";
        } else {
            echo "Found key $key - " . gettype($values[$key]);
    }
}
?>

仅搜索 (b) - 严格的字符串搜索找到该值,数字搜索没有找到它。当数组排序时,所有搜索都会找到它 - 但文档根本没有提到这样的要求。有人可以解释这种行为吗?

4

3 回答 3

4

该值15位于 key 处0array_search返回 this 00评估为false。因此,您对 key 的检查if (!$key)失败0。你必须检查 strict === false手册中有一个巨大的红色警告来解释这一点。

于 2013-08-06T08:25:21.407 回答
1

我认为这是因为返回值array_search是一个混合值。当您执行第一次搜索时,它将在位置找到值,0因此返回键索引,该索引将被评估为false.

于 2013-08-06T08:25:54.060 回答
1

以下是完整的解释:

在您的所有情况下,$key 都等于 0,并且由于您正在执行一个简单的测试,例如if($key)0,因此评估结果为 false,因此您认为搜索不成功。将其更改为if($key===false)将毫无问题地工作。

对数组进行排序时它可以正常工作的原因是因为值 12 在里面,所以它需要键 0 并且键 0 处的 15 现在位于键 1 处,而 1 的计算结果为true

于 2013-08-06T08:32:55.393 回答