Проверка параметра пустого массива JSON на PHP? [Дубликат]

Чтобы сделать более понятным, как это сделать с массивами:

arr=( 'a' 'b' 'c' )
# construct a var assigning the string representation 
# of the variable (array) as its value:
var=arr[@]         
echo "${!var}"
337
задан Cœur 2 January 2017 в 20:16
поделиться

17 ответов

Если вам просто нужно проверить, есть ли какие-либо элементы в массиве

if (empty($playerlist)) {
     // list is empty.
}

Если вам нужно очистить пустые значения перед проверкой (обычно делается для предотвращения explode странных строк):

foreach ($playerlist as $key => $value) {
    if (empty($value)) {
       unset($playerlist[$key]);
    }
}
if (empty($playerlist)) {
   //empty array
}
535
ответ дан luchaninov 16 August 2018 в 11:06
поделиться
  • 1
    Разве вы не должны просто пустым? счетчик будет занимать больше времени для больших массивов. – Dan McGrath 7 February 2010 в 07:22
  • 2
    Готово. Я также изменил его на то, что вам не нужно использовать isset и прочее. – Tyler Carter 7 February 2010 в 07:35
  • 3
    Учитывая его пример кода, переменная будет установлена, поэтому вам не нужно использовать empty(). – Cobby 30 August 2012 в 02:35
  • 4
    ОСТОРОЖНЫЙ! if(!isset($emptyarray)) - false, но if(empty($emptyarray)) возвращает true. Это просто прибило меня – Kolob Canyon 25 April 2017 в 17:45

Я думаю, что лучший способ определить, является ли массив пустым или нет, использовать count () следующим образом:

if(count($array)) {
    return 'anything true goes here';
}else {
    return 'anything false'; 
}
0
ответ дан Anas Red 16 August 2018 в 11:06
поделиться
 $gamerow = mysql_fetch_array($gameresult);

if (!empty(($gamerow['players'])) {
   $playerlist = explode(",", $gamerow['players']);
}else{

  // do stuf if array is empty
}
3
ответ дан Anish Rai 16 August 2018 в 11:06
поделиться

, если вы хотите проверить содержимое массива, которое вы можете использовать:

$arr = array();

if(!empty($arr)){
  echo "not empty";
}
else 
{
  echo "empty";
}

см. здесь: http://codepad.org/EORE4k7v

2
ответ дан Arun A S 16 August 2018 в 11:06
поделиться

Пустой массив ошибочен в 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; ИМО это вообще плохая идея.

113
ответ дан Cobby 16 August 2018 в 11:06
поделиться
  • 1
    Надеюсь, это не изменится в некоторых стандартах ... это будет болезненно – David Constantine 8 August 2017 в 20:23
empty($gamerow['players'])
3
ответ дан Dan McGrath 16 August 2018 в 11:06
поделиться

Я использую этот код

$variable = array();

if( count( $variable ) == 0 )
{
    echo "Array is Empty";
}
else
{
    echo "Array is not Empty";
}

Но учтите, что если массив имеет большое количество ключей, этот код будет тратить много времени на их подсчет по сравнению с другими ответами здесь.

3
ответ дан David Spector 16 August 2018 в 11:06
поделиться

Вышеупомянутые решения не сработали для меня. Скорее я использовал более надежный способ (у него могут быть накладные расходы):

$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.
  }
}
-6
ответ дан gvlasov 16 August 2018 в 11:06
поделиться
  • 1
    Я считаю непостижимым, что none отработанных ответов. Для того чтобы этот ответ на работу count($newArr) должен быть больше 0, ответ , опубликованный за 5 лет до этого, сказал. – cpburnz 9 March 2016 в 20:38
14
ответ дан Ignacio Vazquez-Abrams 16 August 2018 в 11:06
поделиться
  • 1
    старая школа да лучше, как всегда, просто проверьте индекс массива. – Danish 12 February 2018 в 09:33

Некоторые достойные ответы, но просто подумал, что я немного расширю, чтобы объяснить более четко, когда 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] => []

И тестирование вышеуказанных массивов с помощью empty() возвращает следующие результаты:

ARRAY ONE: $ ArrayOne не пуст

ARRAY TWO: $ ArrayTwo не пуст

ARRAY THREE: $ ArrayThree не пуст

Массив всегда будет пустым, когда вы назначаете массив, но не используете его после этого, например:

$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

Итак, когда нет значений, есть ли ключи или нет, используя array_filter() для создания нового массива, а затем проверьте, пуст ли новый массив, показывает, были ли какие-либо значения в исходном массиве. Это не идеально и немного беспорядочно, но если у вас огромный массив и не нужно его прокручивать по какой-либо другой причине, то это самый простой с точки зрения кода.


У меня нет опыта проверки накладных расходов, но было бы полезно узнать различия между использованием array_filter() и foreach проверки, найдено ли значение.

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

65
ответ дан James 16 August 2018 в 11:06
поделиться
  • 1
    Большое спасибо за это. Он был действительно информативным и смог решить мою проблему, используя array_filter() – Brian Powell 25 February 2015 в 16:54
  • 2
    empty (array ()) всегда будет evaludate для FALSE, поэтому добавление count (array ()) == 0 приведет к истинному – mboullouz 13 May 2017 в 21:40
  • 3
    @mboullouz count(array())==0 неверно, когда есть ключи и нет значений, поэтому это не помогает при проверке только значений. Ваше утверждение верное, но вы вынуждаете тест с count(array()), поскольку массив, конечно, пуст. Нам нужно проверить, когда массив вернулся из формы или где-то еще, чтобы узнать, является ли он пустым (ключи / значения) или просто имеет значения или нет – James 21 December 2017 в 16:13
  • 4
    Благодарим вас за подробное объяснение. – Shiva Manhar 27 July 2018 в 05:35

Это похоже на работу во всех случаях

if(!empty(sizeof($array)))
1
ответ дан Madhu Nair 16 August 2018 в 11:06
поделиться

Как насчет:

DepartmentPerSchool = array();
(empty(is_array($DepartmentPerSchool))) ? $DepartmentPerSchool //or echo is not empty : array('not set'=>'Not set. Contact Admin'); //or echo is empty
-1
ответ дан Ngatia Frankline 16 August 2018 в 11:06
поделиться

Вы можете использовать array_filter(), который отлично работает для всех ситуаций:

$ray_state = array_filter($myarray);

if (empty($ray_state)) {
    echo 'array is empty';
} else {
    echo 'array is not empty';
}
2
ответ дан reformed 16 August 2018 в 11:06
поделиться

Почему никто не ответил на этот ответ:

$array = [];

if($array == []) {
    // array is empty
}
0
ответ дан robertmylne 16 August 2018 в 11:06
поделиться

Я решил эту проблему со следующим кодом.

$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);
}
0
ответ дан Suraj Kumar 16 August 2018 в 11:06
поделиться

Если вы хотите выяснить, действительно ли переменная, которую вы тестируете, явно пустым массивом, вы можете использовать что-то вроде этого:

if ($variableToTest === array()) {
    echo 'this is explicitly an empty array!';
}
7
ответ дан Tim Ogilvy 16 August 2018 в 11:06
поделиться
is_array($detect) && empty($detect);

is_array

6
ответ дан zloctb 16 August 2018 в 11:06
поделиться
Другие вопросы по тегам:

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