players将为空或以逗号分隔的列表(或单个值).检查它是否为空的最简单方法是什么?我假设我可以在将$gameresult数组取入后立即执行此操作$gamerow?在这种情况下,跳过爆炸它可能更有效,$playerlist如果它是空的,但为了参数,我如何检查数组是否也是空的?
$gamerow = mysql_fetch_array($gameresult);
$playerlist = explode(",", $gamerow['players']);
Run Code Online (Sandbox Code Playgroud)
Tyl*_*ter 691
如果您只需要检查数组中是否有任何元素
if (empty($playerlist)) {
// list is empty.
}
Run Code Online (Sandbox Code Playgroud)
如果您需要在检查之前清除空值(通常是为了防止explode奇怪的字符串):
foreach ($playerlist as $key => $value) {
if (empty($value)) {
unset($playerlist[$key]);
}
}
if (empty($playerlist)) {
//empty array
}
Run Code Online (Sandbox Code Playgroud)
Cob*_*bby 147
PHP中的空数组是假的,因此您甚至不需要empty()像其他人所建议的那样使用它.
<?php
$playerList = array();
if (!$playerList) {
echo "No players";
} else {
echo "Explode stuff...";
}
// Output is: No players
Run Code Online (Sandbox Code Playgroud)
PHP的empty()确定是否变量不存在或具有falsey的值(如array(),0,null,false,等等).
在大多数情况下,您只想检查!$emptyVar.使用empty($emptyVar)如果变量可能没有设置,你不惯于触发E_NOTICE; IMO这通常是一个坏主意.
Jam*_*mes 78
一些不错的答案,但只是想我会扩展一点,以便在PHP确定数组是否为空时更清楚地解释.
主要说明:
具有键(或键)的数组将被PHP 确定为非空.
由于数组值需要存在键,因此只有在没有键(因此没有值)时,在数组中具有值或不存在值不会确定它是否为空.
因此,检查数组empty()并不只是告诉您是否有值,它会告诉您数组是否为空,并且键是数组的一部分.
因此,在决定使用哪种检查方法之前,请考虑如何生成阵列.
EG 当每个表单字段具有数组名称(即)时,当用户提交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[] = '';
Run Code Online (Sandbox Code Playgroud)
如果您回显出上述数组的数组键和值,则会得到以下结果:
ARRAY ONE:
[UserKeyA] => [UserValueA]
[UserKeyB] => [UserValueB]ARRAY TWO:
[0] => [UserValue01]
[1] => [UserValue02]ARRAY THREE:
[0] => []
[1] => []
并测试上面的数组empty()返回以下结果:
ARRAY ONE:
$ ArrayOne不是空的ARRAY TWO:
$ ArrayTwo不是空的ARRAY THREE:
$ ArrayThree不为空
分配数组但之后不使用数组时,数组将始终为空,例如:
$ArrayFour = array();
Run Code Online (Sandbox Code Playgroud)
这将是空的,即empty()在上面使用if时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
}
Run Code Online (Sandbox Code Playgroud)
运行array_filter()在所有三个实施例的阵列(在此答案第一码块创建)导致以下:
ARRAY ONE:
$ arrayone不为空ARRAY TWO:
$ arraytwo不为空ARRAY THREE:
$ arraythree是空的
因此,当没有值,是否有键时,使用array_filter()创建新数组然后检查新数组是否为空显示原始数组中是否有任何值.
它不理想而且有点乱,但是如果你有一个庞大的数组并且不需要因为任何其他原因而循环它,那么就所需的代码来说这是最简单的.
我没有检查开销的经验,但知道使用array_filter()和foreach检查是否找到值之间的差异会很好.
显然,基准测试需要在各种参数上,小型和大型阵列以及何时存在值而不是等等.
Tim*_*lvy 12
如果你想确定你正在测试的变量是否实际上是一个空数组,你可以使用这样的东西:
if ($variableToTest === array()) {
echo 'this is explicitly an empty array!';
}
Run Code Online (Sandbox Code Playgroud)
Kaa*_*aan 11
我运行了帖子末尾的基准测试。要比较这些方法:
count($arr) == 0 : 数数empty($arr) : 空的$arr == [] :补偿(bool) $arr : 投掷并得到以下结果
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 */|
Run Code Online (Sandbox Code Playgroud)
空和转换为布尔值之间的区别是微不足道的。我已多次运行此测试,它们似乎基本相同。数组的内容似乎并不重要。两者产生相反的结果,但逻辑否定几乎不足以在大多数情况下推动铸造获胜,所以我个人更喜欢空的,为了在任何一种情况下的易读性。
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 */|
Run Code Online (Sandbox Code Playgroud)
为什么没有人说这个答案:
$array = [];
if($array == []) {
// array is empty
}
Run Code Online (Sandbox Code Playgroud)
如果您想排除错误或空行(例如0 => ''),则使用empty()会失败,您可以尝试:
if (array_filter($playerlist) == []) {
// Array is empty!
}
Run Code Online (Sandbox Code Playgroud)
array_filter():如果未提供回调,则将删除所有等于FALSE的数组条目(请参阅转换为boolean)。
如果您想删除所有NULL,FALSE和空字符串(''),但保留零值(0),则可以strlen用作回调,例如:
$is_empty = array_filter($playerlist, 'strlen') == [];
Run Code Online (Sandbox Code Playgroud)
小智 5
如果要检查数组内容,可以使用:
$arr = array();
if(!empty($arr)){
echo "not empty";
}
else
{
echo "empty";
}
Run Code Online (Sandbox Code Playgroud)
看到这里:http : //codepad.org/EORE4k7v
在我看来,索引数组最简单的方法就是:
if ($array) {
//Array is not empty...
}
Run Code Online (Sandbox Code Playgroud)
如果数组不为空,则数组上的“if”条件将评估为true ,如果数组为空则为 false。这是不是适用于关联数组。
小智 5
这里我不再重复已经说过的内容,刚刚测试过,在 PHP-7.3 上更有效的方法是!empty($myARR)或isset($myARR[0]),两者显示相同的速度。其他任何事情都相当慢,包括array_key_exists($myARR[0])并且只是比较$myARR !== Array() | $myARR !== []。所以,我更喜欢empty(),简单,快捷。
| 归档时间: |
|
| 查看次数: |
777253 次 |
| 最近记录: |