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


470

players将为空或以逗号分隔的列表(或单个值)。检查它是否为空的最简单方法是什么?我假设只要将$gameresult数组提取到$gamerow?中就可以这样做。在这种情况下,跳过展开$playerlist是否为空可能会更有效,但是出于参数的考虑,我将如何检查数组是否也为空?

$gamerow = mysql_fetch_array($gameresult);
$playerlist = explode(",", $gamerow['players']);

2
不要使用count(),sizeof(),empty()。空数组返回false:if($ array){
Limitrof

Answers:


773

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

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

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

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

2
你不应该只用空吗?计算大型阵列将需要更长的时间。
Dan McGrath'2

1
做完了 我也更改了它,因为您不必使用isset和东西。
泰勒·卡特

5
给定他的代码示例,将设置该变量,因此您无需使用empty()
科比2012年

4
小心!if(!isset($emptyarray))falseif(empty($emptyarray))返回true。那真是令我
印象深刻

161

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

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

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

在大多数情况下,您只需要检查即可!$emptyVar。使用empty($emptyVar)如果变量可能没有已定,你不这样做不会触发E_NOTICE; IMO这通常是一个坏主意。


2
我希望这不会在某些标准上改变...这将是痛苦的
David Constantine

79

一些不错的答案,但我只是想扩展一下以更清楚地解释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[] = '';

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

数组一:
[UserKeyA] => [UserValueA]
[UserKeyB] => [UserValueB]

数组二:
[0] => [UserValue01]
[1] => [UserValue02]

数组三:
[0] => []
[1] => []

测试上面的数组empty()将返回以下结果:

数组一:
$ ArrayOne不为空

数组二:
$ ArrayTwo不为空

数组三:
$ ArrayThree不为空

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

$ArrayFour = array();

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

因此,如果您的数组具有键(例如通过表单的输入名称或您手动分配它们)(即创建一个以数据库列名称为键但没有来自数据库的值/数据的数组),则该数组将不是 empty()

在这种情况下,您可以在foreach中循环数组,测试每个键是否都有值。如果您仍然需要遍历整个数组,这可能是一个很好的方法,例如检查密钥或清理数据。

但是,如果您只需要知道“如果值存在”则返回TRUEFALSE,则不是最佳方法。有多种方法可以确定数组知道是否具有键时是否具有任何值。函数或类可能是最好的方法,但一如既往,它取决于您的环境和确切的要求,以及其他因素,例如您当前对数组执行的操作(如果有的话)。


这是一种使用很少的代码来检查数组是否具有值的方法:

使用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检查值之间的区别。

显然,基准测试需要在各种参数上,在大小数组上,在有值的情况下,等等。


2
非常感谢。它确实提供了很多信息,并且能够使用array_filter()
Brian Powell

empty(array())将始终评估为FALSE,因此添加count(array())== 0将产生true
timmz

1
count(array())==0当有键且没有值时,@ mboullouz 为false,因此这仅有助于检查值。您的陈述是正确的,但count(array())由于数组为空,因此您将强制使用。我们需要检查数组何时从表单或其他地方返回,以了解其是否为空(键/值)或是否只有值
James

该解决方案非常适合此类阵列,例如,当您要验证输入文件时,它会有所帮助 array_filter($_FILES["documento"]['name'])
Gendrith


12

如果要确定所测试的变量是否实际上是一个明确的空数组,则可以使用以下方法:

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

11

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

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

array_filter():如果未提供回调,则将删除所有等于FALSE的数组条目(请参阅转换为boolean)。

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

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

这是对其他问题的正确答案。使用数组过滤器将破坏具有虚假值的现有元素。这不是OP所要求的。
mickmackusa

8

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

$array = [];

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

1
您的说法不正确。DID有人说这个答案-一年前的Tim Ogilvy。使用方括号代替array()是一回事。
mickmackusa

虽然在技术上是相同的答案... 我用方括号代替了过时的数组函数。
罗布

7
is_array($detect) && empty($detect);

is_array


这些是不必要的检查。OP正在调用explode()-它返回数组类型的数据。检查empty()是不需要的函数调用。正如Cobby在2012年所说的,仅此而已if($detect)。不应为此任务或其他任务实施此解决方案。你可能会认为你是覆盖情况超出了这个问题的范围,以及,从未有一个需要调用empty()is_array(),因为如果变量不是“设置”,然后is_array()将生成“通知:未定义的变量”,如果isset()empty()是矫枉过正,只是使用科比的答案。
mickmackusa

6

我运行了帖子结尾处包含的基准。比较方法:

  • 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 */|

空和强制转换为布尔值之间的区别不大。我已经多次运行了此测试,它们看起来基本上是等效的。数组的内容似乎没有发挥重要作用。两者产生相反的结果,但是逻辑上的否定在大多数情况下都不足以推动演员选举获胜,因此,出于个人可读性考虑,我个人都更倾向于空着。

#!/usr/bin/php
<?php

//    012345678
$nt = 90000000;

$arr0 = [];
$arr1 = [];
$arr2 = [];
$arr3 = [];
$arr4 = [];
$arr5 = [];

for ($i = 0; $i < 500000; $i++) {
    $arr1[] = 0;
    $arr2[] = $i;
    $arr3[] = md5($i);
    $arr4[] = $i % 2 ? $i : md5($i);
    $arr5[md5($i)] = $i;
}

$t00 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    count($arr0) == 0;
}
$t01 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    empty($arr0);
}
$t02 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    $arr0 == [];
}
$t03 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    (bool) $arr0;
}
$t04 = microtime(true);

$t10 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    count($arr1) == 0;
}
$t11 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    empty($arr1);
}
$t12 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    $arr1 == [];
}
$t13 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    (bool) $arr1;
}
$t14 = microtime(true);

/* ------------------------------ */

$t20 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    count($arr2) == 0;
}
$t21 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    empty($arr2);
}
$t22 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    $arr2 == [];
}
$t23 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    (bool) $arr2;
}
$t24 = microtime(true);

/* ------------------------------ */

$t30 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    count($arr3) == 0;
}
$t31 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    empty($arr3);
}
$t32 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    $arr3 == [];
}
$t33 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    (bool) $arr3;
}
$t34 = microtime(true);

/* ------------------------------ */

$t40 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    count($arr4) == 0;
}
$t41 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    empty($arr4);
}
$t42 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    $arr4 == [];
}
$t43 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    (bool) $arr4;
}
$t44 = microtime(true);

/* ----------------------------------- */

$t50 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    count($arr5) == 0;
}
$t51 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    empty($arr5);
}
$t52 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    $arr5 == [];
}
$t53 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    (bool) $arr5;
}
$t54 = microtime(true);

/* ----------------------------------- */

$t60 = $t00 + $t10 + $t20 + $t30 + $t40 + $t50;
$t61 = $t01 + $t11 + $t21 + $t31 + $t41 + $t51;
$t62 = $t02 + $t12 + $t22 + $t32 + $t42 + $t52;
$t63 = $t03 + $t13 + $t23 + $t33 + $t43 + $t53;
$t64 = $t04 + $t14 + $t24 + $t34 + $t44 + $t54;

/* ----------------------------------- */

$ts0[1] = number_format(round($t01 - $t00, 6), 6);
$ts0[2] = number_format(round($t02 - $t01, 6), 6);
$ts0[3] = number_format(round($t03 - $t02, 6), 6);
$ts0[4] = number_format(round($t04 - $t03, 6), 6);

$min_idx = array_keys($ts0, min($ts0))[0];
foreach ($ts0 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts0[$idx] = "   $val   ";
    } else {
        $ts0[$idx] = "/* $val */";
    }

}

$ts1[1] = number_format(round($t11 - $t10, 6), 6);
$ts1[2] = number_format(round($t12 - $t11, 6), 6);
$ts1[3] = number_format(round($t13 - $t12, 6), 6);
$ts1[4] = number_format(round($t14 - $t13, 6), 6);

$min_idx = array_keys($ts1, min($ts1))[0];
foreach ($ts1 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts1[$idx] = "   $val   ";
    } else {
        $ts1[$idx] = "/* $val */";
    }

}

$ts2[1] = number_format(round($t21 - $t20, 6), 6);
$ts2[2] = number_format(round($t22 - $t21, 6), 6);
$ts2[3] = number_format(round($t23 - $t22, 6), 6);
$ts2[4] = number_format(round($t24 - $t23, 6), 6);

$min_idx = array_keys($ts2, min($ts2))[0];
foreach ($ts2 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts2[$idx] = "   $val   ";
    } else {
        $ts2[$idx] = "/* $val */";
    }

}

$ts3[1] = number_format(round($t31 - $t30, 6), 6);
$ts3[2] = number_format(round($t32 - $t31, 6), 6);
$ts3[3] = number_format(round($t33 - $t32, 6), 6);
$ts3[4] = number_format(round($t34 - $t33, 6), 6);

$min_idx = array_keys($ts3, min($ts3))[0];
foreach ($ts3 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts3[$idx] = "   $val   ";
    } else {
        $ts3[$idx] = "/* $val */";
    }

}

$ts4[1] = number_format(round($t41 - $t40, 6), 6);
$ts4[2] = number_format(round($t42 - $t41, 6), 6);
$ts4[3] = number_format(round($t43 - $t42, 6), 6);
$ts4[4] = number_format(round($t44 - $t43, 6), 6);

$min_idx = array_keys($ts4, min($ts4))[0];
foreach ($ts4 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts4[$idx] = "   $val   ";
    } else {
        $ts4[$idx] = "/* $val */";
    }

}

$ts5[1] = number_format(round($t51 - $t50, 6), 6);
$ts5[2] = number_format(round($t52 - $t51, 6), 6);
$ts5[3] = number_format(round($t53 - $t52, 6), 6);
$ts5[4] = number_format(round($t54 - $t53, 6), 6);

$min_idx = array_keys($ts5, min($ts5))[0];
foreach ($ts5 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts5[$idx] = "   $val   ";
    } else {
        $ts5[$idx] = "/* $val */";
    }

}

$ts6[1] = number_format(round($t61 - $t60, 6), 6);
$ts6[2] = number_format(round($t62 - $t61, 6), 6);
$ts6[3] = number_format(round($t63 - $t62, 6), 6);
$ts6[4] = number_format(round($t64 - $t63, 6), 6);

$min_idx = array_keys($ts6, min($ts6))[0];
foreach ($ts6 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts6[$idx] = "   $val   ";
    } else {
        $ts6[$idx] = "/* $val */";
    }

}

echo "             |    count     |    empty     |     comp     |     cast     |\n";
echo "-------------|--------------|--------------|--------------|--------------|\n";
echo "       Empty |";
echo $ts0[1] . '|';
echo $ts0[2] . '|';
echo $ts0[3] . '|';
echo $ts0[4] . "|\n";

echo "     Uniform |";
echo $ts1[1] . '|';
echo $ts1[2] . '|';
echo $ts1[3] . '|';
echo $ts1[4] . "|\n";

echo "     Integer |";
echo $ts2[1] . '|';
echo $ts2[2] . '|';
echo $ts2[3] . '|';
echo $ts2[4] . "|\n";

echo "      String |";
echo $ts3[1] . '|';
echo $ts3[2] . '|';
echo $ts3[3] . '|';
echo $ts3[4] . "|\n";

echo "       Mixed |";
echo $ts4[1] . '|';
echo $ts4[2] . '|';
echo $ts4[3] . '|';
echo $ts4[4] . "|\n";

echo " Associative |";
echo $ts5[1] . '|';
echo $ts5[2] . '|';
echo $ts5[3] . '|';
echo $ts5[4] . "|\n";

echo "-------------|--------------|--------------|--------------|--------------|\n";
echo "       Total |";
echo $ts6[1] . '|';
echo $ts6[2] . '|';
echo $ts6[3] . '|';
echo $ts6[4] . "|\n";

良好的基准,但您忘记sizeofempty...的别名[不是?] ... stackoverflow.com/a/51986794/1429432
Yousha Aleayoub

5

如果要检查数组内容,可以使用:

$arr = array();

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

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


如Cobby在2012年所示,无需调用函数来检查已声明的数组是否为空。
mickmackusa

5

我认为索引数组的最简单方法是:

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

如果数组不为空则该数组上的“ if”条件的值为true,如果为空则为false。这是不是适用于关联数组。


Cobby早在2012年就有效地说明了这种技术。他的回答目前有133个投票。
mickmackusa

看来这不是“最简单的”,而是最简单的,因为没有语法可以更简洁,而且没有函数调用开销。使用索引键和关联键访问数组绝对没有区别。这个答案误导了研究人员。这个答案是多余的,那么incorect3v4l.org/DSLha
mickmackusa

3

我用这个代码

$variable = array();

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

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


如Cobby在2012年所示,无需调用函数来检查已声明的数组是否为空。
mickmackusa

3

您可以使用array_filter()在所有情况下都适用的方法:

$ray_state = array_filter($myarray);

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

1
这个答案正在采用不必要的检查。首先,OP不希望在检查其空度之前从数组中过滤掉任何虚假值,因此您已经偏离了发布的问题。其次,如Cobby在2012年所示,无需调用函数来检查已声明的数组是否为空。
mickmackusa

2
 $gamerow = mysql_fetch_array($gameresult);

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

  // do stuf if array is empty
}

2

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

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

count()可以完全删除该呼叫-请参阅Cobby的答案。
mickmackusa

2

做出最适当的决定需要了解数据的质量以及要遵循的流程。

  1. 如果您要取消/忽略/删除该行,则最早的过滤点应该在mysql查询中。

    • WHERE players IS NOT NULL
    • WHERE players != ''
    • WHERE COALESCE(players, '') != ''
    • WHERE players IS NOT NULL AND players != ''
    • ...这取决于您的商店数据,还有其他方法,我将在这里停止。
  2. 如果您不确定100%是否在结果集中存在该列,则应检查该列是否已声明。这意味着在列上调用array_key_exists()isset()empty()。我不会去打扰这里的划定不同(有用于击穿其他SO页面,这里是一个开始:123)。就是说,如果您不能完全控制结果集,则可能是您对应用程序的“灵活性”过于迷恋,因此应该重新考虑是否值得潜在地访问不存在的列数据。 实际上,我是说您永远不需要检查是否已声明一列,因此,您永远不需要empty()执行此任务。 如果有人在争论empty()更合适,那么他们就对脚本的表达力发表自己的个人看法。如果您发现以下#5中的条件不明确,请在代码中添加内联注释,但我不会。最重要的是,进行函数调用没有程序优势。

  3. 您的字符串值可能包含0您想视为真/有效/非空的吗?如果是这样,则只需要检查列值是否具有长度。

    这里是一个演示使用strlen()。这将指示该字符串爆炸后是否会创建有意义的数组元素。

  4. 我认为重要的是要提到,通过无条件爆炸,可以保证您生成一个非空数组。 证明:演示 换句话说,检查数组是否为空是完全没有用的-每次都将是非空的。

  5. 如果您的字符串可能不会包含零值(例如,这是一个由ID开头1且只能递增的id组成的csv ),那么if ($gamerow['players']) {您所需要的只是故事的结尾。

  6. ...但是等等,确定此值的空后您要做什么?如果您有一些期望的向下脚本$playerlist,但有条件地声明该变量,则可能会冒用前一行的值或再次生成通知的风险。那么,您是否需要无条件声明$playerlist某些东西?如果字符串中没有真实值,那么您的应用程序会从声明空数组中受益吗?答案是肯定的。在这种情况下,您可以通过退回到空数组来确保变量为数组类型-这样,如果您将该变量馈入循环中就没有关系了。以下条件声明都是等效的。

    • `if($ gamerow ['players']){$ playerlist = explode(',',$ gamerow ['players']); } else {$ playerlist = []; }
    • $playerlist = $gamerow['players'] ? explode(',', $gamerow['players']) : [];

为什么我要花这么长时间来解释这个非常基本的任务?

  1. 我在此页面上几乎所有的答案都被举报了,并且该答案很可能会招来复仇票(捍卫该站点的举报人通常会发生这种情况-如果答案不赞成投票且没有评论,则始终持怀疑态度)。
  2. 我认为,重要的是Stackoverflow是一种值得信赖的资源,不会因错误信息和次优技术而毒害研究人员。
  3. 这就是我展示出我对即将到来的开发人员的关心程度,以便他们了解操作方法和原因,而不是仅仅养活一代复制粘贴的程序员。
  4. 我经常使用旧页面来关闭新的重复页面-这是经验丰富的志愿者的职责,他们知道如何快速找到重复的页面。我不能让自己使用带有错误/错误/次优/误导性信息的旧页面作为参考,因为那样我就在积极地损害新研究人员的利益。

@ptr它在这里。
mickmackusa

1
empty($gamerow['players'])

有时您不知道要使用的元素数组键值 $matches = preg_grep ( "/^$text (\w+)/i" , $array ) ; 进行检查if ( count ( $matches ) > 0 )
Salem

假定该列存在于结果集中,所以empty()做的工作太多。
mickmackusa

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

1
欢迎使用Stack Overflow!感谢您提供的代码段,它们可能会提供一些有限的即时帮助。通过描述为什么这是一个很好的解决问题的方法,适当的解释将大大提高其长期价值,并且对于将来有其他类似问题的读者来说,它将更加有用。请编辑您的答案以添加一些解释,包括您所做的假设。
sepehr

-3

这似乎适用于所有情况

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

3
这有太多的开销。出于任何原因,任何开发人员都不应实施此解决方案。
mickmackusa,

@mickmackusa好点了,但是新手如何学习确定哪些操作会导致过多的开销?什么是赠品,或者在没有运行性能测试的情况下过多开销的面值标准是什么?
ptrcao

1
@ptr每个函数调用都有一个“成本”。如果任务可以在没有函数调用的情况下完成,那么它将胜过使用函数调用的技术。
mickmackusa

@ptr我已经为这个问题发布了全面的答案。希望它能消除您对此特定页面的任何疑虑。
mickmackusa

@mickmackusa您是否要添加指向其他帖子的链接?
ptrcao

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.