2013-04-10 3 views
2

Похоже, что вы не можете использовать функцию search_array в PHP для поиска индекса 0, и пусть это значение будет равно true.php array_search 0 index

Рассмотрим этот код, например:

$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 и оценить его как истину?

+0

Вы не видите [BIG RED BOX] (http://php.net/array_search#refsect1-function.array-search-returnvalues)? Попытайтесь прочитать документацию и понять язык, прежде чем задавать такие вопросы. – cmbuckley

ответ

26

Это прямо указано в документах. Вы должны использовать === или !==:

$key = array_search(...); 

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

В противном случае, когда $key является 0, который evaluates to false при тестировании как логическое значение.

+2

Вы можете, конечно, использовать 'if (($ key = array_search (...))! == false)' –

+0

Я прочитал несколько потоков на этом, прочитал руководство снова и снова, но не смог найти ответ. Я думаю, что у меня был «! ==» в неправильной части моего кода. Теперь работаем - спасибо! – user2056238

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

} 
4

Условный в вашем втором примере блок отдает приоритет порядка выполнения для оператора !==, вы хотите сделать наоборот, хотя.

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

!== имеет более высокий приоритет, чем==, что делает круглые скобки необходимо.

+0

Примечание: здесь самое правильное. Если бы я мог перенести upvotes из моего ужасного, старого, наивного, теперь удаленного ответа, я бы это сделал. – Sammitch

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

это более безопасный

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

if (($key = array_search(100,$test)) === false) { 
    echo "Not found"; 
} else{ 
    echo $key; 
} 
Смежные вопросы