#php
Добрый день, ребят. Есть массив, назовем его UserArticleList, вот его вардамп:
array(2) {
[0]=> string(1) "1"
[1]=> string(1) "2"
}
Есть такой кусочек кода:
foreach($ArticleList as $article){
if(array_search($article['id'],$UserArticleList)){
continue;
//Продолжаем обрабатывать запись
}
Здесь циклом перебираются все записи бд($ArticleListas). Если id текущей записи есть
в массиве, то переходим к следующей итерации цикла. И все должно бы работать, но array_search
находит только элемент со значением 2. Почему?)
Ответы
Ответ 1
В доках написано, что: Внимание Эта функция может возвращать как boolean FALSE, так и не-boolean значение, которое приводится к FALSE. За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией. Соответственно, когда попадается первый элемент, возвращается ключ под номером 0. И в виду неявного преобразования 0 в булев тип, получается конструкция вот такого вида: if (false) { .... вот он и не находит ничего. Следовательно. Надо писать либо так: if(array_search($article['id'],$UserArticleList) !== false){... либо использовать in_array: if(in_array($article['id'],$UserArticleList)){...Ответ 2
foreach($ArticleList as $article){ if(in_array($article['id'],$UserArticleList)){ do some... } } Если также необходимо сравнивать типы, добавьте true: in_array($article['id'],$UserArticleList,true)Ответ 3
А что вам мешает использовать in_array ?
Комментариев нет:
Отправить комментарий