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