PHP数组搜索0索引

11

似乎在PHP中无法使用search_array函数来搜索0索引并将其计算为true。

例如,请考虑以下代码:

$test=array(100, 101, 102, 103);

if($key=array_search(100,$test)){

     echo $key;

}

else{

     echo "Not found";

} 
在干草堆中找到针'100',并将关键字作为0返回。 目前为止还不错,但是当我评估搜索是否成功时,失败了,因为返回的值为0,等于false!php手册建议使用'!==',但这样做会导致未返回关键字(数组索引),而是返回1或0。
if($key=(array_search(103,$test)!== false)){

}

那么我应该如何成功地搜索数组,在0索引中找到匹配项并使其评估为true?


你没有看到大红框吗?在提问之前,试着阅读文档并理解语言。 - cmbuckley
6个回答

44

这在文档中明确提到。您需要使用===!==

$key = array_search(...);

if ($key !== false) ...

否则,当$key0时,会被视为布尔值的false

2
当然,你可以使用 if( ($key = array_search(...)) !== false) - Niet the Dark Absol
我在这个问题上阅读了几个线程,一遍又一遍地阅读了手册,但找不到答案。我认为我在代码的错误部分使用了'!=='。现在解决了 - 谢谢! - user2056238
但是如果我使用像if(array_search(...) === true)这样的代码,为什么它不起作用呢?(=== true也是字符串比较)有人能解释一下吗? - Estail Se
@EstailSe 你的代码毫无意义。array_search永远不可能返回布尔值true,所以它不起作用,也不清楚你想要实现什么。 - user229044
好的,我明白了!谢谢,我之前在将索引号与布尔值进行比较时犯了错误。 - Estail Se

5
你第二个例子中的条件语句赋予了 !== 运算符执行顺序优先级,但你实际上想做的是相反的。
if (($key = array_search(100,$test)) !== false) {

!==的优先级高于==,这使得括号是必需的。


1
注意:这是这里最正确的答案。如果我能够将我的糟糕、陈旧、幼稚、现在已删除的回答的赞转移过来,那就好了。 - Sammitch

1
$key = array_search($what, $array);
if($key !== false and $array[$key] == $what) {
 return true;
}

它更安全


0
if(($key = array_search(103,$test)) !== false){

}

0
$test=array(100, 101, 102, 103);

if (($key = array_search(100,$test)) === false) {
    echo "Not found";
} else{
    echo $key;
} 

-1
重要提示:array_search函数有一个“STRICT”第三个参数,用于强制进行更好的搜索,以区分“0”和“00”等困难情况,但这里的重点是:
正确的测试来确认未找到是使用===或!== FALSE。
在php中,您必须将结果与FALSE(===)进行比较,以确保“未找到”。FALSE相当于其他语言(js/java)中的-1。
if( strpos('Haystack', 'Hay') === FALSE){  // it is index 0 too...
   die('Not found');
} else {
   echo 'It is the string index ( 0 > -1 and !== FALSE )';
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接