Чтобы сделать более понятным, как это сделать с массивами:
arr=( 'a' 'b' 'c' )
# construct a var assigning the string representation
# of the variable (array) as its value:
var=arr[@]
echo "${!var}"
Если вам просто нужно проверить, есть ли какие-либо элементы в массиве
if (empty($playerlist)) {
// list is empty.
}
Если вам нужно очистить пустые значения перед проверкой (обычно делается для предотвращения explode
странных строк):
foreach ($playerlist as $key => $value) {
if (empty($value)) {
unset($playerlist[$key]);
}
}
if (empty($playerlist)) {
//empty array
}
Я думаю, что лучший способ определить, является ли массив пустым или нет, использовать count () следующим образом:
if(count($array)) {
return 'anything true goes here';
}else {
return 'anything false';
}
$gamerow = mysql_fetch_array($gameresult);
if (!empty(($gamerow['players'])) {
$playerlist = explode(",", $gamerow['players']);
}else{
// do stuf if array is empty
}
, если вы хотите проверить содержимое массива, которое вы можете использовать:
$arr = array();
if(!empty($arr)){
echo "not empty";
}
else
{
echo "empty";
}
см. здесь: http://codepad.org/EORE4k7v
Пустой массив ошибочен в PHP, поэтому вам даже не нужно использовать empty()
, как предложили другие.
<?php
$playerList = array();
if (!$playerList) {
echo "No players";
} else {
echo "Explode stuff...";
}
// Output is: No players
PHP empty()
определяет если переменная не существует или имеет значение false (например, array()
, 0
, null
, false
и т. д.).
В большинстве случаев вы просто хотите проверить !$emptyVar
. Используйте empty($emptyVar)
, если переменная не была установлена. И вы не хотите запускать E_NOTICE
; ИМО это вообще плохая идея.
Я использую этот код
$variable = array();
if( count( $variable ) == 0 )
{
echo "Array is Empty";
}
else
{
echo "Array is not Empty";
}
Но учтите, что если массив имеет большое количество ключей, этот код будет тратить много времени на их подсчет по сравнению с другими ответами здесь.
Вышеупомянутые решения не сработали для меня. Скорее я использовал более надежный способ (у него могут быть накладные расходы):
$countarr = count($newArr); // Count the elements in an array.
$checkarr = "" ; //Initialize the value of variable to blank.
for($x=0;$x<$countarr;$x++)
{
$checkarr = $newArr1[$x] ;
if($checkarr != "" )
{
// do stuff if array is not empty.
}
}
count($newArr)
должен быть больше 0, ответ , опубликованный за 5 лет до этого, сказал.
– cpburnz
9 March 2016 в 20:38
count($gamerow['players'])
будет 0.
Некоторые достойные ответы, но просто подумал, что я немного расширю, чтобы объяснить более четко, когда PHP определяет, является ли массив пустым.
Основные примечания:
Массив с ключом (или ключами) будет определен как NOT empty с помощью PHP.
Поскольку значениям массива нужны ключи для существования, значения или нет в массиве не определяют, является ли он пустым, только если ключей нет (и, следовательно, нет значений).
Таким образом, проверка массива с empty()
не просто говорит вам, есть ли у вас значения или нет, это говорит вам, что массив пуст, а ключи являются частью массива.
Итак, рассмотрите, как вы создаете массив, прежде чем принимать решение о том, какой метод проверки использовать. EG В массиве есть ключи , когда пользователь отправляет вашу форму HTML, когда каждое поле формы имеет имя массива (т.е. name="array[]"
). Массив non empty будет создан для каждого поля, так как для каждого массива поля формы будут добавлены значения с автоматическим увеличением.
Возьмите эти массивы, например:
/* Assigning some arrays */
// Array with user defined key and value
$ArrayOne = array("UserKeyA" => "UserValueA", "UserKeyB" => "UserValueB");
// Array with auto increment key and user defined value
// as a form field would return with user input
$ArrayTwo[] = "UserValue01";
$ArrayTwo[] = "UserValue02";
// Array with auto incremented key and no value
// as a form field would return without user input
$ArrayThree[] = '';
$ArrayThree[] = '';
Если вы выделите ключи массива и значения для указанных выше массивов, вы получите следующее:
ARRAY ONE: [UserKeyA] => [UserValueA] [UserKeyB] => [UserValueB]
ARRAY TWO: [0] => [UserValue01] [1] => [UserValue02]
ARRAY THREE: [0] => [] [1] => []
blockquote>И тестирование вышеуказанных массивов с помощью
empty()
возвращает следующие результаты:ARRAY ONE: $ ArrayOne не пуст
ARRAY TWO: $ ArrayTwo не пуст
ARRAY THREE: $ ArrayThree не пуст
blockquote>Массив всегда будет пустым, когда вы назначаете массив, но не используете его после этого, например:
$ArrayFour = array();
Это будет пустым, то есть PHP вернет TRUE при использовании if
empty()
выше.Итак, если ваш массив имеет ключи - либо, например, имена ввода формы, либо если вы назначили их вручную (т. е. создать массив с именами столбцов базы данных в качестве ключей, но не иметь значений / данных из базы данных), тогда массив НЕ будет
empty()
.В этом случае вы можете закодировать массив в foreach, тестируя, имеет ли каждый ключ значение. Это хороший метод, если вам все равно нужно проходить через массив, возможно, проверять ключи или дезинфицировать данные.
Однако это не лучший метод, если вам просто нужно знать, «если существуют значения», возвращает TRUE или FALSE . Существуют различные методы, чтобы определить, имеет ли массив какие-либо значения, когда он знает, что у него будут ключи. Функцией или классом может быть лучший подход, но, как всегда, это зависит от вашей среды и точных требований, а также от других вещей, таких как то, что вы сейчас делаете с массивом (если есть).
Вот подход, который использует очень маленький код для проверки того, имеет ли массив значения:
Использование
array_filter()
: Итерирует по каждому значению в массиве, передавая их функции обратного вызова. Если функция обратного вызова возвращает значение true, текущее значение из массива возвращается в массив результатов.$EmptyTestArray = array_filter($ArrayOne); if (!empty($EmptyTestArray)) { // do some tests on the values in $ArrayOne } else { // Likely not to need an else, // but could return message to user "you entered nothing" etc etc }
Выполнение
array_filter()
во всех трех примерах массивов (созданных в первом блоке кода в этом ответе) приводит к следующему:ARRAY ONE: $ arrayone не пуст
ARRAY TWO: $ arraytwo не пуст
ARRAY THREE: $ arraythree empty
blockquote>Итак, когда нет значений, есть ли ключи или нет, используя
array_filter()
для создания нового массива, а затем проверьте, пуст ли новый массив, показывает, были ли какие-либо значения в исходном массиве. Это не идеально и немного беспорядочно, но если у вас огромный массив и не нужно его прокручивать по какой-либо другой причине, то это самый простой с точки зрения кода.
У меня нет опыта проверки накладных расходов, но было бы полезно узнать различия между использованием
array_filter()
иforeach
проверки, найдено ли значение.Очевидно, что эталонный показатель должен быть по разным параметрам, на малых и больших массивах и когда есть значения и т. Д.
array_filter()
– Brian Powell
25 February 2015 в 16:54
count(array())==0
неверно, когда есть ключи и нет значений, поэтому это не помогает при проверке только значений. Ваше утверждение верное, но вы вынуждаете тест с count(array())
, поскольку массив, конечно, пуст. Нам нужно проверить, когда массив вернулся из формы или где-то еще, чтобы узнать, является ли он пустым (ключи / значения) или просто имеет значения или нет
– James
21 December 2017 в 16:13
Это похоже на работу во всех случаях
if(!empty(sizeof($array)))
Как насчет:
DepartmentPerSchool = array(); (empty(is_array($DepartmentPerSchool))) ? $DepartmentPerSchool //or echo is not empty : array('not set'=>'Not set. Contact Admin'); //or echo is empty
Вы можете использовать array_filter()
, который отлично работает для всех ситуаций:
$ray_state = array_filter($myarray);
if (empty($ray_state)) {
echo 'array is empty';
} else {
echo 'array is not empty';
}
Почему никто не ответил на этот ответ:
$array = [];
if($array == []) {
// array is empty
}
Я решил эту проблему со следующим кодом.
$catArray=array();
$catIds=explode(',',$member['cat_id']);
if(!empty($catIds[0])){
foreach($catIds as $cat_id){
$catDetail=$this->Front_Category->get_category_detail($cat_id);
$catArray[]=$catDetail['allData']['cat_title'];
}
echo implode(',',$catArray);
}
Если вы хотите выяснить, действительно ли переменная, которую вы тестируете, явно пустым массивом, вы можете использовать что-то вроде этого:
if ($variableToTest === array()) {
echo 'this is explicitly an empty array!';
}
empty()
. – Cobby 30 August 2012 в 02:35if(!isset($emptyarray))
-false
, ноif(empty($emptyarray))
возвращаетtrue
. Это просто прибило меня – Kolob Canyon 25 April 2017 в 17:45