#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 ?
Комментариев нет:
Отправить комментарий