PHP Как проверить, не имеет ли массив ключа и значения

Я использую одну пользовательскую CMS, разработанную кем-то, и у меня возникает проблема с проверкой результата массива.

Функция возвращает массив имен пользователей, передавая массив идентификаторов пользователей.

Пример кода

$all_users = "1,5,9,10,25,40"; // getting from database

$user_ids = explode(',', $all_users);
$usernames  = get_userids_to_usernames($user_ids); //this returns usernames array by passing uesrids array

Если в базе данных нет пользователей в столбце, функция возвращает странный пустой/нулевой массив, как показано ниже.

var_dump ($ имена пользователей);

array(1) { [""]=> NULL }

print_r ($ имена пользователей);

(
    [] => 
)

Теперь проблема в том, что я хочу проверить, пуст ли массив или имеет значение взамен, но я пробовал все is_null, empty, count($usernames) > 0, но ни один из них не работает.

Может ли кто-нибудь помочь мне проверить условно, имеет ли массив значение или пустой, как указано выше, пустой результат.

Хотя это не пусто. Можете ли вы просто проверить, есть ли один элемент с ключом "" и значением null? 3-4 условия (is_array, count, isset, ==(=)), одно if.

Jonnix 01.02.2019 14:06

используйте is_null(), чтобы проверить, является ли значение нулевым

Nikola Kirincic 01.02.2019 14:10

@ splash58 да, я проверил все это и получил тот же результат false. Любая идея, как это проверить, чтобы можно было использовать условный оператор для такого результата?

Code Lover 01.02.2019 14:10

@niklaz is_null тоже не работает.

Code Lover 01.02.2019 14:10
"1,5,9,10,25,40"; // getting from database, почему база данных возвращает идентификаторы CSV?
Scuzzy 01.02.2019 14:12
if (is_array($usernames) && count($usernames) === 1 && isset($usernames['']) && $usernames[''] === null)?
Jonnix 01.02.2019 14:13

@Scuzzy, это не мое приложение, поэтому понятия не имею, но оно возвращается таким образом.

Code Lover 01.02.2019 14:13

Я бы проверил на уровне запроса. Если вы получаете результаты, у вас есть совпадение. Также столбцы с разделителями — плохой дизайн.

user3783243 01.02.2019 14:13

@CodeLover if (empty($array) or empty(current($array))

splash58 01.02.2019 14:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
9
104
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вы можете использовать in_array, чтобы проверить, есть ли в массиве пустое значение, и array_key_exists, чтобы проверить ключ.

in_array("", $array)
array_key_exists("", $array)

http://php.net/manual/en/function.in-array.php

http://php.net/manual/fr/function.array-key-exists.php

Кажется, это работает, но будет проверено и с другими ответами. Просто чтобы найти лучшее решение.

Code Lover 01.02.2019 14:16

@CodeLover, и как это работает, если значение поиска in_array, но ключом является ''?

splash58 01.02.2019 14:18

Проверьте, есть ли в массиве элемент, значение которого является пустой строкой, создав типы приведения php? Это лучший способ покончить с кучей жуков

Viktar Pryshchepa 01.02.2019 14:20

@splash58 самая большая проблема здесь заключается в том, что проверка empty или count здесь не работает, поскольку он возвращает false. Поэтому я считаю, что решения @Dialex работают (я проверял), и решение @line88 тоже работает. Теперь нужно посмотреть, что лучше.

Code Lover 01.02.2019 14:24

@splash58 @Code Lover Вы также можете использовать array_key_exists для проверки пустых ключей. Я просто забыл, что вы искали это. Возможно, вы можете использовать их вместе в таком случае: if (in_array("", $array) || array_key_exists("", $array))

Dialex 01.02.2019 14:28

Я обновил свой ответ, чтобы он лучше соответствовал вопросу

Dialex 01.02.2019 14:34

Перебрать массив и проверить, являются ли ключи или значения пустыми или нулевыми.

$newarray = [];
foreach($array as $key=>$value)
{
    if (is_null($value) || trim($value) == '' || is_null($value) || trim($key) == ''){
    continue; //skip the item
  }
        $newarray[$key] = $value;
}

Вот обходной путь

if (array_key_exists('', $a) && $a[''] === null) {
    unset($a['']);
}

затем проверьте на пустоту

Это выглядит как самое безопасное из предложенных решений. С пользовательской CMS вы не можете ожидать, что она всегда будет вести себя одинаково, и этот ответ учитывает это.

Fabian 01.02.2019 14:27

Если вы хотите использовать с ним пусто, попробуйте фильтр массива

if (empty(array_filter($arr))) {
    //Do something
}

Фильтр массива автоматически удалит для вас ложные значения, и вы можете включить обратный вызов, если вам нужна большая гибкость.

Другие вопросы по теме

Похожие вопросы

Как извлечь поддокумент в laravel mongodb
Laravel и пакет spatie/laravel-translatable -> Сделать поисковый запрос для специального символа
Я не могу получить доступ к данным от контроллера для просмотра (tpl = шаблон) OpenCart
Как получить сводные данные внутри красноречивого обратного вызова функции withCount?
Ошибка синтаксического анализа PHP: синтаксическая ошибка, неожиданное «Y9gG??» (T_STRING). Внезапно появляется на изображениях и в таблицах стилей
Я хочу отфильтровать те же отображаемые данные в моей таблице данных
Вызов встроенного фильтра в пользовательском фильтре Twig
Разница между двумя массивами в php
Как использовать динамические данные в качестве параметра с функцией date_create_from_format в PHP
Выбор запроса mysqli, например, запрос уведомления, выбор из четырех других таблиц, которые ограничены определенным значением ключа и возвращают единственный результат