【问题标题】:PHP - Using a for loop to count elements in an array instead of using built-in PHP function countPHP - 使用 for 循环对数组中的元素进行计数,而不是使用内置 PHP 函数计数
【发布时间】:2023-04-04 16:47:01
【问题描述】:

我正在努力更好地理解 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);

【问题讨论】:

  • $temp 是一个数组而不是一个数值。这样你的循环就不起作用了
  • 为什么要避免count函数?您需要将其作为 for 循环的第二个参数。
  • 我想看看是否可以在不使用count 的情况下做到这一点,因为您可以根据问题使用foreach loop 来做到这一点。

标签: php for-loop count


【解决方案1】:

人们说你需要使用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

【讨论】:

  • 这可能会有所帮助。但是有next
  • 所以?他们没有说他们不想使用下一个。尽管如此,我还是删除了next()
  • 我不确定 OP 的要求。为什么不内置函数? :o
  • @Hanky 웃 Panky 根据您对isset() 的建议,我能够让它工作并让循环用完,但我不需要做$i &lt; 1000000,我只是使用我最初使用$&lt; $temp 的东西,效果很好。您能否更新您的答案以反映这一点?
  • 但是我认为如果我们的数组只有 8-10 个项目,那么循环循环 1000000 次是浪费。
【解决方案2】:

现在,您正在使用 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

【讨论】:

  • 即使不使用explode,比如说我只使用month_temp 作为数组,我仍然会得到一些无限循环。当然我可以使用count,但这违背了目的。还是谢谢。
  • @walter 是的,您确实需要计数才能有条件,但是还有另一种方法,通过数组指针,请查看我的演示
【解决方案3】:

$i &lt; $temp 不是您想要的条件。我不确定 PHP 是如何进行比较的,但您正在将整数与数组进行比较。这总是被评估为真,所以循环会一直持续下去。

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

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

【讨论】:

    【解决方案4】:

    你可以使用 sizeOf 函数代替 count 之类的

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

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

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

    除了这个我不知道有什么方法可用。

    【讨论】:

    • 不使用包括sizeof在内的任何内置PHP函数可以做到这一点吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多