Как проверить, пуст ли массив с помощью PHP?
players
будет либо пустым, либо через запятую (или одно значение). Какой самый простой способ проверить, пусто ли оно? Я предполагаю, что смогу сделать это, как только принесу $gameresult
для проживания в $gamerow
? В этом случае, вероятно, было бы более эффективно пропустить взрыв $playerlist
если он пуст, но для аргумента, как бы я проверил, пуст ли массив?
$gamerow = mysql_fetch_array($gameresult);
$playerlist = explode(",", $gamerow['players']);
17 ответов
Если вам просто нужно проверить, есть ли какие-либо элементы в массиве
if (empty($playerlist)) {
// list is empty.
}
Если вам нужно убрать пустые значения перед проверкой (обычно делается для предотвращения explode
ing странные строки):
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!';
}
Я использую этот код
$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';
}
Я думаю, что лучший способ определить, пуст ли массив или нет, - использовать 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.
}
}