PHP - 使用 for 循环来计算数组中的元素,而不是使用内置的 PHP 函数计数

PHP - Using a for loop to count elements in an array instead of using built-in PHP function count

我正在努力更好地理解 for 循环以及如何在没有内置 PHP 函数 count 的情况下使用 for loop 来计算数组中的元素.

我已经能够使用 foreach 循环来完成它,(计算数组中的元素)但是由于某种原因 for loop 不工作?

Foreach 循环有效:

$month_temp = "78, 60, 62, 68, 71, 68, 73, 85, 66, 64, 76, 63, 81, 76, 73, 68, 72, 73, 75, 65, 74, 63, 67, 65, 64, 68, 73, 75, 79, 73";

$temp = explode(',', $month_temp);

$count = 0;

foreach ($temp as $value) {
    $count++;
}
print_r($count);

有人可以指出我做错了什么吗? (我最终遇到了某种没有任何显示的无限循环)

For 循环不工作:

$month_temp = "78, 60, 62, 68, 71, 68, 73, 85, 66, 64, 76, 63, 81, 76, 73, 68, 72, 73, 75, 65, 74, 63, 67, 65, 64, 68, 73, 75, 79, 73";

$temp = explode(',', $month_temp);

$count = 0;

for ($i = 0; $i < $temp; $i++) {
    $count++;
}
print_r($count);

$i < $temp不是你想要的条件。我不确定 PHP 是如何进行比较的,但您是在将整数与数组进行比较。这总是评估为真,因此循环将永远持续下去。

讽刺的是,你想要$i < count($temp)!这将使循环 运行 直到 $i 与数组中的元素数相同,此时你将有三个表达式 ($i, $count 和 count($temp)) 表示数字数组中的元素数。

所以这可能不是测试您的 for 循环技能的最佳方式。也许尝试运行通过整数集合来找到特定数字的索引,找到所有数字的总和,最大数字,最小数字,范围,平均值等等:)

现在,您正在 for:

中使用展开的字符串(数组)
$temp = explode(',', $month_temp);
^
|------------------v
for ($i = 0; $i < $temp; $i++) {
// doesn't make sense

旁注:如果您的目的是获取分解数组中的元素数量,只需使用 count() 函数即可。那个循环实际上是多余的。

注意:您可以使用 for 来设计一种方式,而无需通过数组指针进行计数:

$month_temp = "78, 60, 62, 68, 71, 68, 73, 85, 66, 64, 76, 63, 81, 76, 73, 68, 72, 73, 75, 65, 74, 63, 67, 65, 64, 68, 73, 75, 79, 73";
$temp = explode(',', $month_temp);
for (current($temp); ($i = current($temp)) !== false; ($i = next($temp))) {
    // do something
    echo trim($i) , '<br/>';

}

Sample Output

您可以使用 sizeOf 函数来代替计数

$max = sizeof($huge_array);
for($i = 0; $i < $max;$i++)
{
code...
}

如果您不想使用 count 或 sizeof,那么最好使用

foreach($arr as $ar){
//Code here
}

除了这个我不认为有任何可用的方法。

人们说您需要使用 count() 来限制循环。但是如果你要使用 count() 那么目的是什么?因为你的问题说你想在不使用 count().

的情况下查看计数

您必须将限制提高相当长的时间,让循环继续进行,直到数组中没有更多元素,然后您才能打破循环

$count = 0;
for ($i = 0; $i < 1000000; $i++) {
     if(isset($temp[$i]))   
        $count++;
     else
         break;
}
print_r($count);

另一个简化版本

$count = 0;
for ($i = 0; TRUE; $i++) {
     if(isset($temp[$i]))  
        $count++;
     else
         break;
}
print_r($count);

Fiddle

Fiddle 2