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

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

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

17 ответов


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

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

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

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

пустой массив falsey в PHP, поэтому вам даже не нужно использовать empty() как предлагали другие.

<?php
$playerList = array();
if (!$playerList) {
    echo "No players";
} else {
    echo "Explode stuff...";
}
// Output is: No players

PHP empty() определяет, если переменная не существует или имеет значение falsey (например,array(), 0, null, false и т. д.).

в большинстве случаев вы просто хотите проверить !$emptyVar. Использовать empty($emptyVar) если переменная, возможно, не была установлена, и вы не будете запускать E_NOTICE; IMO это вообще плохая идея.


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


Основные Ноты:

массив с ключом (или ключами) будет определяться как не пусто по PHP.

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

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


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

МАССИВ ДВА:
[0] => [UserValue01]
[1] => [UserValue02]

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

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

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

МАССИВ ДВА:
$ArrayTwo не пуст

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

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

$ArrayFour = array();

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

Итак, если Ваш массив имеет ключи - либо, например, имена ввода формы, либо если вы назначаете их вручную (т. е. создаете массив с именами столбцов базы данных в качестве ключей, но без значений/данных из базы данных), то массив не будет empty().

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

однако это не лучший метод, если вам просто нужно знать," если значения существуют " возвращает правда или 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 не пуст

МАССИВ ДВА:
$arraytwo не пуст

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

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


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

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



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

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

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

is_array


empty($gamerow['players'])

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

$variable = array();

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

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


 $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


можно использовать 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
}

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

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

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

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

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

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

Как насчет:

DepartmentPerSchool = array();
(empty(is_array($DepartmentPerSchool))) ? $DepartmentPerSchool //or echo is not empty : array('not set'=>'Not set. Contact Admin'); //or echo is 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.
  }
}