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

如何使用PHP检查数组是否为空?,php,arrays,Php,Arrays,玩家将为空或以逗号分隔的列表(或单个值)。检查它是否为空的最简单方法是什么?我假设只要我将$gameresult数组提取到$gamerow中,我就可以这样做?在这种情况下,如果$playerlist为空,则跳过分解它可能会更有效,但为了便于讨论,我如何检查数组是否也是空的 $gamerow = mysql_fetch_array($gameresult); $playerlist = explode(",", $gamerow['players']); 将为0。如果您只需要检查数组中是否有任何

玩家
将为空或以逗号分隔的列表(或单个值)。检查它是否为空的最简单方法是什么?我假设只要我将
$gameresult
数组提取到
$gamerow
中,我就可以这样做?在这种情况下,如果
$playerlist
为空,则跳过分解它可能会更有效,但为了便于讨论,我如何检查数组是否也是空的

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

将为0。

如果您只需要检查数组中是否有任何元素

empty($gamerow['players'])
if (empty($playerlist)) {
     // list is empty.
}
如果需要在检查之前清除空值(通常是为了防止
爆炸
奇怪的字符串):


空数组在PHP中是错误的,因此您甚至不需要像其他人建议的那样使用
empty()

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

如果要检查可使用的数组内容:

$arr = array();

if(!empty($arr)){
  echo "not empty";
}
else 
{
  echo "empty";
}
请看这里:


一些不错的答案,但我想我应该扩展一下,以便在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不是空的

数组三:
$ArrayTree不是空的

分配数组时,数组将始终为空,但此后不使用它,例如:

$ArrayFour = array();
这将是空的,即在上面使用if
empty()
时,PHP将返回TRUE

因此,如果您的数组有键(例如通过表单的输入名称或手动分配键)(即创建一个以数据库列名作为键但没有来自数据库的值/数据的数组),那么该数组将不会为
空()

在这种情况下,可以在foreach中循环数组,测试每个键是否都有值。如果您需要运行数组,这是一个很好的方法,可能需要检查密钥或清理数据

但是,如果您只需要知道“值是否存在”返回TRUE或FALSE,那么这并不是最好的方法。 当一个数组知道它将有键时,有多种方法来确定它是否有任何值。函数或类可能是最好的方法,但它始终取决于您的环境和确切的需求,以及其他事情,例如您当前对阵列所做的操作(如果有的话)


下面是一种使用很少的代码检查数组是否有值的方法:

使用
array\u 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\u filter()
,结果如下:

数组一:
$arrayone不是空的

数组二:
$arraytwo不是空的

数组三:
$ArrayTree为空

因此,当没有值时,无论是否有键,使用
array\u filter()
创建一个新数组,然后检查新数组是否为空,显示原始数组中是否有值。
这并不理想,也有点混乱,但如果您有一个巨大的数组,并且不需要出于任何其他原因循环它,那么就所需代码而言,这是最简单的


我在检查开销方面没有经验,但最好了解使用
array\u filter()
foreach
检查是否找到值之间的区别

显然,基准测试将需要在各种参数上,在小数组和大数组上,以及在有值和无值的情况下等等。我使用这段代码

$variable = array();

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

但是请注意,如果数组有大量的键,则与此处的其他答案相比,此代码将花费大量时间来计算它们。

如果要确定正在测试的变量是否确实是一个空数组,可以使用以下方法:

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

您可以使用
array\u 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
}

我认为确定数组是否为空的最佳方法是使用count(),如下所示:


我用下面的代码解决了这个问题

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

这似乎适用于所有情况

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

如果要排除假行或空行(例如
0=>'
),则使用
empty()
将失败,可以尝试:

if (array_filter($playerlist) == []) {
  // Array is empty!
}
:如果未提供回调,则将删除所有等于FALSE的数组项(请参阅转换为布尔值)

如果您希望删除所有NULL、FALSE和空字符串(
'
),但保留零值(
0
),则可以使用
strlen
作为回调,例如:

$is_empty = array_filter($playerlist, 'strlen') == [];
在我看来
$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);
}
if(!empty(sizeof($array)))
if (array_filter($playerlist) == []) {
  // Array is empty!
}
$is_empty = array_filter($playerlist, 'strlen') == [];
    if ($array) {
      //Array is not empty...  
    }
Contents  \method |    count     |    empty     |     comp     |     cast     |
------------------|--------------|--------------|--------------|--------------|
            Empty |/* 1.213138 */|/* 1.070011 */|/* 1.628529 */|   1.051795   |
          Uniform |/* 1.206680 */|   1.047339   |/* 1.498836 */|/* 1.052737 */|
          Integer |/* 1.209668 */|/* 1.079858 */|/* 1.486134 */|   1.051138   |
           String |/* 1.242137 */|   1.049148   |/* 1.630259 */|/* 1.056610 */|
            Mixed |/* 1.229072 */|/* 1.068569 */|/* 1.473339 */|   1.064111   |
      Associative |/* 1.206311 */|   1.053642   |/* 1.480637 */|/* 1.137740 */|
------------------|--------------|--------------|--------------|--------------|
            Total |/* 7.307005 */|   6.368568   |/* 9.197733 */|/* 6.414131 */|
$status = "";

$new_array = array();

if(!empty($new_array)){
  $status = "1";   // not a blank array
}
else{
  $status = "0";   // blank array
}
if (isset($playerlist[0])) {
  // do something
}