players
будут либо пустыми, либо разделенными запятыми (или одним значением). Каков самый простой способ проверить, является ли он пустым? Я предполагаю, что могу сделать это, как только я $gameresult
массив $gamerow
в $gamerow
? В этом случае, вероятно, было бы более эффективным пропустить $playerlist
если он пуст, но ради аргумента, как бы проверить, пуст ли массив?
$gamerow = mysql_fetch_array($gameresult); $playerlist = explode(",", $gamerow['players']);
Если вам просто нужно проверить, есть ли в массиве ЛЮБЫЕ элементы
if (empty($playerlist)) { // list is empty. }
Если вам нужно очистить пустые значения перед проверкой (как правило, для предотвращения explode
странных строк):
foreach ($playerlist as $key => $value) { if (empty($value)) { unset($playerlist[$key]); } } if (empty($playerlist)) { //empty array }
сforeach ($playerlist as $key => $value) { if (empty($value)) { unset($playerlist[$key]); } } if (empty($playerlist)) { //empty array }
Пустой массив ошибочен в 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
; ИМО это вообще плохая идея.
Некоторые достойные ответы, но просто подумал, что я немного расширю, чтобы объяснить более четко, когда PHP определяет, является ли массив пустым.
Основные примечания:
Массив с ключом (или ключами) будет определен как НЕ пустой PHP.
Поскольку значениям массива нужны ключи для существования, значения или нет в массиве не определяют, является ли он пустым, только если нет ключей (и, следовательно, нет значений).
Поэтому проверка массива с помощью empty()
не просто говорит вам, есть ли у вас значения или нет, это говорит вам, что массив пуст, а ключи являются частью массива.
Поэтому рассмотрите, как вы производите свой массив, прежде чем принимать решение о том, какой метод проверки использовать.
EG Массив будет иметь ключи, когда пользователь отправит вашу форму HTML, когда каждое поле формы имеет имя массива (т. Е. Name 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[] = '';
Если вы выделите ключи массива и значения для указанных выше массивов, вы получите следующее:
ARRAY ONE:
[UserKeyA] => [UserValueA]
[UserKeyB] => [UserValueB]ARRAY TWO:
[0] => [UserValue01]
[1] => [UserValue02]МАССА ТРИ:
[0] => []
[1] => []
И тестирование вышеуказанных массивов с помощью empty()
возвращает следующие результаты:
ARRAY ONE:
$ ArrayOne не пустARRAY TWO:
$ ArrayTwo не пустМАССА ТРИ:
$ ArrayThree не пуст
Массив всегда будет пустым, когда вы назначаете массив, но не используете его после этого, например:
$ArrayFour = array();
Это будет пустым, то есть PHP вернет TRUE при использовании, если 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 не пустМАССА ТРИ:
$ arraythree пуст
Поэтому, когда нет значений, есть ли ключи или нет, используйте array_filter()
для создания нового массива, а затем проверьте, пуст ли новый массив, показывает ли какие-либо значения в исходном массиве.
Это не идеально и немного беспорядочно, но если у вас огромный массив и не нужно его прокручивать по какой-либо другой причине, то это самый простой с точки зрения кода.
Я не уверен в проверке накладных расходов, но было бы полезно знать различия между использованием array_filter()
и проверки foreach
если значение найдено.
Очевидно, что эталонный показатель должен быть по разным параметрам, на небольших и больших массивах и когда есть значения, а не и т. Д.
count($gamerow['players'])
будет 0.
Если вы хотите выяснить, действительно ли переменная, которую вы тестируете, явно пустой массив, вы можете использовать что-то вроде этого:
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_filters, который отлично работает для всех ситуаций
$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 }
Я думаю, что лучший способ определить, пуст ли массив или нет, – использовать count () следующим образом:
if(count($array)) { return 'anything true goes here'; }else { return 'anything false'; }
Как насчет:
DepartmentPerSchool = array (); (пустой (is_array ($ DepartmentPerSchool)))? $ DepartmentPerSchool // или echo не пуст: array ('not set' => 'Не задано. Contact Admin'); // или эхо пуст
Вышеупомянутые решения не сработали для меня. Скорее я использовал более надежный способ (у него могут быть накладные расходы):
$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. } }