用 $key !== false 判断 array_search() 是否命中。找到第一个元素时,返回的是整数键 0。只有没找到才返回布尔值 false。
为什么第一个元素容易被误判
把以下代码保存为 search.php 并执行 php search.php。先查看返回值,再比较宽松判断和严格判断的结果。
<?php $codes = ['A01', 'B02'];
$key = array_search('A01', $codes, true);
var_dump($key);
var_dump((bool) $key);
var_dump($key !== false);

预期分别看到 int(0)、bool(false) 和 bool(true)。使用 if ($key) 会跳过已经找到的第一个元素。
第三个参数 true 用来比较什么
第三个参数控制搜索值是否也要匹配类型。把字符串编号和数字编号放在不同的关联键下,便于查看匹配的是哪项。
$ids = ['number' => 42, 'string' => '42'];
var_dump(array_search('42', $ids, true));
var_dump(array_search(42, $ids, true));
var_dump(array_search('missing', $ids, true));

三个结果依次是字符串键 string、字符串键 number 和布尔值 false。严格比较结果与开启严格搜索是两个独立设置。
只想知道元素是否存在怎么办
若业务只关心商品编号是否存在,可以直接用返回布尔值的 in_array()。需要定位元素时再用 array_search()。
var_dump(in_array('42', $ids, true));
预期输出 true。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











