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

问题描述 投票:392回答:19

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

$gamerow = mysql_fetch_array($gameresult);
$playerlist = explode(",", $gamerow['players']);
php arrays
19个回答
658
投票

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

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

如果你需要在检查之前清除空值(通常是为了防止explodeing奇怪的字符串):

foreach ($playerlist as $key => $value) {
    if (empty($value)) {
       unset($playerlist[$key]);
    }
}
if (empty($playerlist)) {
   //empty array
}

3
投票

我用这个代码

$variable = array();

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

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


3
投票
 $gamerow = mysql_fetch_array($gameresult);

if (!empty(($gamerow['players'])) {
   $playerlist = explode(",", $gamerow['players']);
}else{

  // do stuf if array is empty
}

3
投票

您可以使用适用于所有情况的array_filter()

$ray_state = array_filter($myarray);

if (empty($ray_state)) {
    echo 'array is empty';
} else {
    echo 'array is not empty';
}

1
投票
empty($gamerow['players'])

1
投票

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

if(count($array)) {
    return 'anything true goes here';
}else {
    return 'anything false'; 
}

1
投票

在我看来,索引数组的最简单方法是:

    if ($array) {
      //Array is not empty...  
    }

如果数组不为空,则数组上的“if”条件将评估为true;如果数组为空,则评估为false。这不适用于关联数组。


0
投票

这似乎适用于所有情况

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

-1
投票

我用以下代码解决了这个问题。

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

-2
投票

怎么样:

DepartmentPerSchool = array();
(empty(is_array($DepartmentPerSchool))) ? $DepartmentPerSchool //or echo is not empty : array('not set'=>'Not set. Contact Admin'); //or echo is empty

-7
投票

上述解决方案对我不起作用。相反,我使用更可靠的方式(它可能有移动开销):

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

145
投票

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

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

PHP的empty()确定变量是否不存在或具有假值(如array()0nullfalse等)。

在大多数情况下,您只想检查!$emptyVar。如果变量可能没有设置并且你不会触发empty($emptyVar),请使用E_NOTICE; IMO这通常是一个坏主意。


76
投票

一些不错的答案,但只是想我扩展一点,以便在PHP确定数组是否为空时更清楚地解释。


主要说明:

具有键(或键)的数组将被PHP确定为非空。

由于数组值需要存在键,因此只有在没有键(因此没有值)时,在数组中具有值或不存在值不会确定它是否为空。

因此,使用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[] = '';

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

ARRAY ONE: [UserKeyA] => [UserValueA] [UserKeyB] => [UserValueB]

ARRAY TWO: [0] => [UserValue01] [1] => [UserValue02]

阵列三: [0] => [] [1] => []

使用empty()测试上述数组会返回以下结果:

ARRAY ONE: $ ArrayOne不为空

ARRAY TWO: $ ArrayTwo不为空

阵列三: $ ArrayThree不为空

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

$ArrayFour = array();

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

因此,如果您的数组有键 - 或者通过例如表单的输入名称,或者如果您手动分配它们(即创建一个数据库列名作为键但没有来自数据库的值/数据的数组),那么该数组将不是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检查是否找到值之间的差异会很好。

显然,基准测试需要在各种参数上,小型和大型阵列以及何时存在值而不是等等。


19
投票

11
投票

如果你想确定你正在测试的变量是否实际上是一个空数组,你可以使用这样的东西:

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

7
投票

为什么没有人说这个答案:

$array = [];

if($array == []) {
    // array is empty
}

6
投票
is_array($detect) && empty($detect);

is_array


6
投票

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

if (array_filter($playerlist) == []) {
  // Array is empty!
}

array_filter():如果没有提供回调,则将删除所有数组的条目等于FALSE(参见转换为布尔值)。

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

$is_empty = array_filter($playerlist, 'strlen') == [];

4
投票

如果要检查可能使用的阵列内容:

$arr = array();

if(!empty($arr)){
  echo "not empty";
}
else 
{
  echo "empty";
}

看到这里:http://codepad.org/EORE4k7v

© www.soinside.com 2019 - 2024. All rights reserved.