玩家要么是空的,要么是逗号分隔的列表(或者是单个值)。检查它是否为空的最简单的方法是什么?我假设我可以这样做,只要我取回$gameresult数组到$gamerow?在这种情况下,如果$playerlist是空的,跳过爆炸可能会更有效,但为了讨论,我如何检查数组是否为空?
$gamerow = mysql_fetch_array($gameresult);
$playerlist = explode(",", $gamerow['players']);
玩家要么是空的,要么是逗号分隔的列表(或者是单个值)。检查它是否为空的最简单的方法是什么?我假设我可以这样做,只要我取回$gameresult数组到$gamerow?在这种情况下,如果$playerlist是空的,跳过爆炸可能会更有效,但为了讨论,我如何检查数组是否为空?
$gamerow = mysql_fetch_array($gameresult);
$playerlist = explode(",", $gamerow['players']);
当前回答
$gamerow = mysql_fetch_array($gameresult);
if (!empty(($gamerow['players'])) {
$playerlist = explode(",", $gamerow['players']);
}else{
// do stuff if array is empty
}
其他回答
在我看来,索引数组的最简单的方法是:
if ($array) {
//Array is not empty...
}
如果数组不为空,则数组上的'if'条件将计算为true,如果数组为空则为false。这不适用于关联数组。
一些不错的答案,但我只是想展开一点,以更清楚地解释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检查是否找到值之间的区别,那就更好了。
显然,基准测试需要在各种参数上,在大小数组上,当有值时,等等。
empty($gamerow['players'])
在PHP中,空数组是错误的,因此甚至不需要像其他人建议的那样使用empty()。
<?php
$playerList = array();
if (!$playerList) {
echo "No players";
} else {
echo "Explode stuff...";
}
// Output is: No players
PHP的empty()确定变量是否存在或值是否为假值(如array(), 0, null, false等)。
在大多数情况下,你只想检查!$emptyVar。使用empty($emptyVar)如果变量可能没有设置,你不愿意触发一个E_NOTICE;在我看来,这是个坏主意。
这似乎适用于所有情况
if(!empty(sizeof($array)))