如何使用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()
, 0
, null
, false
等)。
在大多数情况下,你只是想检查!$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每个键是否有值。 无论如何,如果您需要遍历数组,可能会检查密钥或清理数据,这是一个很好的方法。
但是,如果您只需要知道“存在的值”是否返回TRUE或FALSE ,则不是最好的方法。 有多种方法可以确定一个数组是否有任何值,当知道它有键时。 一个函数或类可能是最好的方法,但一如既往,这取决于你的环境和确切的要求,以及其他的东西,比如你目前对数组做什么(如果有的话)。
这是一个使用很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. } }