PHP array_search始终返回数组的第一个键

Aar*_*nks 6 php arrays function

我最近发现在我的代码中使用array_search函数时遇到了麻烦.我正在搜索数组"$ allcraftatts"的值为"sharp".我尝试通过设置两行实验来解决问题:

$testcopy=$allcraftatts;
$testsharp=array_search("sharp", $testcopy);
Run Code Online (Sandbox Code Playgroud)

使用"print_r(get_defined_vars());" 后来,我得到了这个结果:

[testcopy] => Array
                (
                    [0] => 0
                    [1] => 0
                    [2] => 0
                    [3] => 0
                    [4] => 0
                    [5] => 0
                    [6] => Sharp Stone
                    [7] => Sharp Stones
                    [8] => stone
                    [9] => object
                    [10] => sharp
                    [11] => hard
                    [12] => 0
                    [13] => 0
                    [14] => 0
                    [15] => 0
                    [16] => 0
                    [17] => 0
                    [18] => 0
                )

[testsharp] => 0
Run Code Online (Sandbox Code Playgroud)

我确保在任何其他时间都不修改这些变量.

现在,如果我将代码更改为

$testcopy=$allcraftatts;
unset($testcopy[0]);
$testsharp=array_search("sharp", $testcopy);
Run Code Online (Sandbox Code Playgroud)

它返回"1".

这让我相信它总是返回数组中的第一个键.

它让我感到困惑!这是一个让你害怕语言本身出错的错误之一.不管这是多么令人怀疑,我实际上最终还是被迫在那里看错了PHP源代码,但遗憾的是无法理解它.

看到这是一个简单的功能,我绝对会被不可避免的简单回答完全羞辱,但在这一点上,我只想要一个答案.

Bab*_*aba 8

array_search使用 ==搜索过程中比较值

FORM PHP DOC

如果第三个参数strict设置为TRUE,那么array_search()函数将在haystack中搜索相同的元素.这意味着它还将检查大海捞针中的针的类型,并且对象必须是同一个实例.

第一个元素是在搜索过程0中转换为字符串0

简单测试

var_dump("sharp" == 0); //true
var_dump("sharp" === 0); //false
Run Code Online (Sandbox Code Playgroud)

解决方案使用strict选项来搜索相同的值

$testsharp = array_search("sharp", $testcopy,true);
                                               ^---- Strict Option

var_dump($testsharp);
Run Code Online (Sandbox Code Playgroud)

产量

10
Run Code Online (Sandbox Code Playgroud)