玩家要么是空的,要么是逗号分隔的列表(或者是单个值)。检查它是否为空的最简单的方法是什么?我假设我可以这样做,只要我取回$gameresult数组到$gamerow?在这种情况下,如果$playerlist是空的,跳过爆炸可能会更有效,但为了讨论,我如何检查数组是否为空?
$gamerow = mysql_fetch_array($gameresult);
$playerlist = explode(",", $gamerow['players']);
玩家要么是空的,要么是逗号分隔的列表(或者是单个值)。检查它是否为空的最简单的方法是什么?我假设我可以这样做,只要我取回$gameresult数组到$gamerow?在这种情况下,如果$playerlist是空的,跳过爆炸可能会更有效,但为了讨论,我如何检查数组是否为空?
$gamerow = mysql_fetch_array($gameresult);
$playerlist = explode(",", $gamerow['players']);
当前回答
你可以使用array_filter(),它适用于所有情况:
$ray_state = array_filter($myarray);
if (empty($ray_state)) {
echo 'array is empty';
} else {
echo 'array is not 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不是空的 组三: $ArrayThree不是空的
当你赋值一个数组但之后不使用它时,数组将始终为空,例如:
$ArrayFour = array();
这将是空的,即PHP在上面使用if empty()时将返回TRUE。
因此,如果你的数组有键-例如通过表单的输入名称或如果你手动分配它们(即创建一个数据库列名作为键的数组,但没有数据库中的值/数据),那么数组将不是空的()。
在这种情况下,您可以在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()(在这个答案的第一个代码块中创建),结果如下:
数组: $arrayone不是空的 两个数组: $arraytwo不是空的 组三: $arraythree为空
因此,当没有值时,无论是否有键,使用array_filter()创建一个新数组,然后检查新数组是否为空,显示原始数组中是否有任何值。 这并不理想,而且有点混乱,但如果您有一个巨大的数组,并且由于任何其他原因不需要循环它,那么就所需的代码而言,这是最简单的。
我在检查开销方面没有经验,但如果能知道使用array_filter()和foreach检查是否找到值之间的区别,那就更好了。
显然,基准测试需要在各种参数上,在大小数组上,当有值时,等等。
如果你只需要检查数组中是否有任何元素,你可以使用数组本身,因为PHP的松散类型,或者-如果你喜欢更严格的方法-使用count():
if (!$playerlist) {
// list is empty.
}
if (count($playerlist) === 0) {
// list is empty.
}
如果你需要在检查之前清理空值(通常是为了防止奇怪的字符串爆炸):
foreach ($playerlist as $key => $value) {
if (!strlen($value)) {
unset($playerlist[$key]);
}
}
if (!$playerlist) {
//empty array
}
我使用这个代码
$variable = array();
if( count( $variable ) == 0 )
{
echo "Array is Empty";
}
else
{
echo "Array is not Empty";
}
但请注意,如果数组有大量的键,与这里的其他答案相比,这段代码将花费大量时间来计算它们。
这似乎适用于所有情况
if(!empty(sizeof($array)))
$status = "";
$new_array = array();
if(!empty($new_array)){
$status = "1"; // not a blank array
}
else{
$status = "0"; // blank array
}