如何使用PHP检查数组是否为空?

players将是空的或逗号分隔的列表(或单个值)。 什么是最简单的方法来检查是否是空的? 我假设我可以这样做,只要我把$gameresult数组$gamerow ? 在这种情况下,跳过$playerlist可能会更有效,如果它是空的,但为了争论,我将如何检查数组是否为空?

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

如果你只需要检查数组中是否有ANY元素

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

如果在检查之前需要清空空值(通常是为了防止explode奇怪的string):

 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()决定一个variables是否存在或者是否有一个假的值(比如array()0nullfalse等)。

在大多数情况下,你只是想检查!$emptyVar 。 使用empty($emptyVar)如果variables可能没有被设置,你不会触发E_NOTICE ; 国际海事组织这通常是一个坏主意。

一些体面的答案,但只是想当PHP确定数组是否为空时,我会扩大一点来更清楚地解释。


主要说明:

具有一个键(或多个键)的数组将被PHP确定为不空

由于数组的值需要存在键,只有在没有键(AND因此没有值)的情况下,数组中是否有值才能确定它是否为空。

所以用empty()检查一个数组并不是简单地告诉你是否有值,它告诉你数组是否为空,键是数组的一部分。


因此,在决定使用哪种检查方法之前,请考虑如何生成数组。
EG当每个表单字段有一个数组名(例如name="array[]" )时,当用户提交HTML表单时,数组具有键。
将为每个字段生成一个非空数组,因为每个表单字段的数组都会自动递增键值。

以这些数组为例:

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

如果您为上述数组回显数组键和值,则会得到以下结果:

arrays一:
[UserKeyA] => [UserValueA]
[UserKeyB] => [UserValueB]

arrays二:
[0] => [UserValue01]
[1] => [UserValue02]

arrays三:
[0] => []
[1] => []

empty()testing上面的数组返回如下结果:

arrays一:
$ ArrayOne不是空的

arrays二:
$ ArrayTwo不是空的

arrays三:
$ ArrayThree不是空的

当您分配一个数组但是之后不使用它时,数组总是空的,例如:

 $ArrayFour = array(); 

这将是空的,即如果使用上面的empty() ,PHP将返回TRUE。

所以,如果你的数组有键 – 无论是例如一个表单的input名称,或者如果你手动分配(即创build一个数据库列名作为键,但没有数据库中的值/数据),那么该数组将不会是empty()

在这种情况下,您可以在foreach循环数组,testing每个键是否有值。 无论如何,如果您需要遍历数组,可能会检查密钥或清理数据,这是一个很好的方法。

但是,如果您只需要知道“存在的值”是否返回TRUEFALSE ,则不是最好的方法。 有多种方法可以确定一个数组是否有任何值,当知道它有键时。 一个函数或类可能是最好的方法,但一如既往,这取决于你的环境和确切的要求,以及其他的东西,比如你目前对数组做什么(如果有的话)。


这是一个使用很less的代码来检查一个数组是否有值的方法:

使用array_filter()
迭代数组中的每个值,将它们传递给callback函数。 如果callback函数返回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() (在此答案的第一个代码块中创build)将导致以下结果:

arrays一:
$ arrayone不是空的

arrays二:
$ arraytwo不是空的

arrays三:
$ arraythree是空的

所以,当没有值时,是否有键,使用array_filter()创build一个新的数组,然后检查新的数组是否为空,显示原始数组中是否有值。
这是不理想的,有点混乱,但如果你有一个巨大的数组,并不需要通过任何其他原因循环,那么这是最简单的代码需要。


我没有经验检查开销,但它是很好的知道使用array_filter()foreach检查是否find一个值之间的差异。

很显然,基准testing需要各种参数,小型和大型arrays以及何时有值而不是等。

count($gamerow['players'])将会是0。

如果你想确定你正在testing的variables是否实际上显式地是一个空的数组,你可以使用像这样的东西:

 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 } 

怎么样:

 DepartmentPerSchool = array();
 (空(is_array($ DepartmentPerSchool)))?  $ DepartmentPerSchool //或者echo不为空:array('not set'=>'未设置。联系pipe理员');  //或者echo是空的

上述解决scheme不适合我。 相反,我用更可靠的方式(它可能会有开销):

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