Как проверить, пуст ли массив с помощью PHP?

players будет либо пустым, либо списком, разделенным запятыми (или одним значением). Каков самый простой способ проверить, не пуст ли он? Я предполагаю, что могу сделать это, как только я принесу массив $gameresult в $gamerow? В этом случае, вероятно, было бы более эффективным пропустить взрыва $playerlist, если он пуст, но для аргумента, как бы проверить, пуст ли массив?

$gamerow = mysql_fetch_array($gameresult);
$playerlist = explode(",", $gamerow['players']);

Ответ 1

Если вам просто нужно проверить, есть ли в массиве ЛЮБЫЕ элементы

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

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

foreach ($playerlist as $key => $value) {
    if (empty($value)) {
       unset($playerlist[$key]);
    }
}
if (empty($playerlist)) {
   //empty array
}

Ответ 2

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

Ответ 3

Некоторые достойные ответы, но просто подумал, что я немного расширю, чтобы объяснить более четко, когда PHP определяет, является ли массив пустым.


Основные примечания:

Массив с ключом (или ключами) будет определен как НЕ пустой PHP.

В качестве значений массива нужны ключи для существования, имеющие значения или нет в массиве, не определяет, пуст ли он, только если нет ключей (и, следовательно, нет значений).

Итак, проверка массива с помощью empty() не просто говорит вам, есть ли у вас значения или нет, это говорит вам, что массив пуст, а ключи являются частью массива.


Итак, рассмотрите, как вы производите свой массив, прежде чем принимать решение о том, какой метод проверки использовать.
EG Массив будет иметь ключи, когда пользователь отправляет вашу форму HTML, когда каждое поле формы имеет имя массива (т.е. name="array[]").
Для каждого поля будет создан непустой массив, так как для каждого массива полей формы будут введены автоматически увеличивающиеся значения ключей.

Возьмите эти массивы, например:

/* 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[] = '';

Если вы выделите ключи массива и значения для указанных выше массивов, вы получите следующее:

МАССА ОДИН:
[UserKeyA] = > [UserValueA]
[UserKeyB] = > [UserValueB]

ARRAY TWO:
[0] = > [UserValue01]
[1] = > [UserValue02]

МАССА ТРИ:
[0] = > []
[1] = > []

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

МАССА ОДИН:
$ ArrayOne не пуст

ARRAY TWO:
$ ArrayTwo не пуст

МАССА ТРИ:
$ ArrayThree не пуст

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

$ArrayFour = array();

Это будет пустым, то есть PHP вернет TRUE при использовании if empty() в приведенном выше.

Итак, если у вашего массива есть ключи - либо, например, имена ввода формы, либо если вы назначили их вручную (т.е. создайте массив с именами столбцов базы данных в качестве ключей, но нет значений/данных из базы данных), тогда массив НЕ be 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() во всех трех примерах массивов (созданных в первом блоке кода в этом ответе) приводит к следующему:

МАССА ОДИН:
$ arrayone не пуст

ARRAY TWO:
$ arraytwo не пуст

МАССА ТРИ:
$ arraythree пуст

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


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

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

Ответ 5

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

if ($variableToTest === array()) {
    echo 'this is explicitly an empty array!';
}

Ответ 6

is_array($detect) && empty($detect);

is_array

Ответ 7

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

$array = [];

if($array == []) {
    // array is empty
}

Ответ 8

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

$arr = array();

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

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

Ответ 9

empty($gamerow['players'])

Ответ 10

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

$variable = array();

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

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

Ответ 11

 $gamerow = mysql_fetch_array($gameresult);

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

  // do stuf if array is empty
}

Ответ 12

Если вы хотите исключить ложные или пустые строки (например, 0 => ''), где использование empty() не удастся, вы можете попробовать:

if (array_filter($playerlist) == []) {
  // Array is empty!
}

array_filter(): Если обратный вызов не предоставлен, все записи массива, равные FALSE (см. преобразование в логическое значение), будут удалены.

Если вы хотите удалить все NULL, FALSE и пустые строки (''), но оставить нулевые значения (0), вы можете использовать strlen в качестве обратного вызова, например:

$is_empty = array_filter($playerlist, 'strlen') == [];

Ответ 13

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

$ray_state = array_filter($myarray);

if (empty($ray_state)) {
    echo 'array is empty';
} else {
    echo 'array is not empty';
}

Ответ 14

Кажется, это работает для всех случаев

if(!empty(sizeof($array)))

Ответ 15

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

if(count($array)) {
    return 'anything true goes here';
}else {
    return 'anything false'; 
}

Ответ 16

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

$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);
}

Ответ 17

На мой взгляд, самый простой способ для индексированного массива будет просто:

    if ($array) {
      //Array is not empty...  
    }

Условие if в массиве будет иметь значение true, если массив не пустой, и false, если массив пустой. Это не относится к ассоциативным массивам.

Ответ 18

Как насчет:

DepartmentPerSchool = array();
(empty(is_array($DepartmentPerSchool))) ? $DepartmentPerSchool //or echo is not empty : array('not set'=>'Not set. Contact Admin'); //or echo is empty

Ответ 19

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

$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.
  }
}