Я использую одну пользовательскую 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
Если в базе данных нет пользователей в столбце, функция возвращает странный пустой/нулевой массив, как показано ниже.
array(1) { [""]=> NULL }
(
[] =>
)
Теперь проблема в том, что я хочу проверить, пуст ли массив или имеет значение взамен, но я пробовал все is_null, empty, count($usernames) > 0, но ни один из них не работает.
Может ли кто-нибудь помочь мне проверить условно, имеет ли массив значение или пустой, как указано выше, пустой результат.
используйте is_null(), чтобы проверить, является ли значение нулевым
@ splash58 да, я проверил все это и получил тот же результат false. Любая идея, как это проверить, чтобы можно было использовать условный оператор для такого результата?
@niklaz is_null тоже не работает.
"1,5,9,10,25,40"; // getting from database, почему база данных возвращает идентификаторы CSV?
if (is_array($usernames) && count($usernames) === 1 && isset($usernames['']) && $usernames[''] === null)?
@Scuzzy, это не мое приложение, поэтому понятия не имею, но оно возвращается таким образом.
Я бы проверил на уровне запроса. Если вы получаете результаты, у вас есть совпадение. Также столбцы с разделителями — плохой дизайн.
@CodeLover if (empty($array) or empty(current($array))






Вы можете использовать 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
Кажется, это работает, но будет проверено и с другими ответами. Просто чтобы найти лучшее решение.
@CodeLover, и как это работает, если значение поиска in_array, но ключом является ''?
Проверьте, есть ли в массиве элемент, значение которого является пустой строкой, создав типы приведения php? Это лучший способ покончить с кучей жуков
@splash58 самая большая проблема здесь заключается в том, что проверка empty или count здесь не работает, поскольку он возвращает false. Поэтому я считаю, что решения @Dialex работают (я проверял), и решение @line88 тоже работает. Теперь нужно посмотреть, что лучше.
@splash58 @Code Lover Вы также можете использовать array_key_exists для проверки пустых ключей. Я просто забыл, что вы искали это. Возможно, вы можете использовать их вместе в таком случае: if (in_array("", $array) || array_key_exists("", $array))
Я обновил свой ответ, чтобы он лучше соответствовал вопросу
Перебрать массив и проверить, являются ли ключи или значения пустыми или нулевыми.
$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 вы не можете ожидать, что она всегда будет вести себя одинаково, и этот ответ учитывает это.
Если вы хотите использовать с ним пусто, попробуйте фильтр массива
if (empty(array_filter($arr))) {
//Do something
}
Фильтр массива автоматически удалит для вас ложные значения, и вы можете включить обратный вызов, если вам нужна большая гибкость.
Хотя это не пусто. Можете ли вы просто проверить, есть ли один элемент с ключом "" и значением null? 3-4 условия (is_array, count, isset, ==(=)), одно if.