如何使用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();
这将是空的,即在上面使用ifempty()
时,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
}