【问题标题】:Foreach into PHP arrayForeach 进入 PHP 数组
【发布时间】:2016-01-29 15:26:57
【问题描述】:

我有这些数组值:

$cart_item['addons'][0]['price'] = '52';
$cart_item['addons'][1]['price'] = '34';
$cart_item['addons'][2]['price'] = '12';
......
....

我希望每个值都为 0,例如:

$cart_item['addons'][0]['price'] = '0';
$cart_item['addons'][1]['price'] = '0';
$cart_item['addons'][2]['price'] = '0';
....
...

所以我试试这段代码:

for ($i=0; $i > 0 ; $i++) { 
    $cart_item['addons'][$i]['price'] = '0';
}

但它不起作用。感谢您的帮助!

【问题讨论】:

  • $i > 0,无限循环问题。
  • @RajdeepPaul 从技术上讲,它会使循环永远不会运行,因为第一次迭代是错误的。但是,是的,如果 $i 曾经超过 0,则无限。
  • @JonathanKuhn 哦,是的,错过了初始化部分。感谢您指出这一点。

标签: php arrays for-loop


【解决方案1】:

试试这个简单的解决方案:

$count=count($cart_item['addons']);
for($i=0; $i<$count;$i++ ){
  $cart_item['addons'][$i]['price'] = '0';
}

【讨论】:

  • 如果数组中有 5,000,000 个元素怎么办?您要在每次迭代中计算它们吗?这太疯狂了。
  • @Nordenheim 你有什么建议?
  • 看我的回答。显然,计数总是可以在循环之外完成。
  • 在我的回答中得到了很好的更新。
【解决方案2】:

如果你的数组足够大,将count() 函数放在for 循环中就是一个疯狂的椰子。它会慢很多很多。请在循环外使用count

$count = count($cart_item['addons'])

for($i=0; $i<$count;$i++ ){
 $cart_item['addons'][$i]['price'] = '0';
}

【讨论】:

    【解决方案3】:

    您必须更频繁地循环才能达到此目的:

    foreach($cart_item['addons'] as &$addons {
        foreach($addons as &$addon) {
              $addon['price'] = 0;
        }
    }
    

    【讨论】:

    • 仅供参考,避免在 foreach 循环中使用引用,特别是如果您打算不取消设置引用。在 PHP 中,变量的作用域不是循环,因此在循环之后,对数组中最后一个元素的引用仍然存在。再次使用$addon 将对数组中的最后一个值进行更改。 IMO,只需 foreach($a as $k=&gt;$v) 并引用 $k 中的密钥来修改数组要容易得多。完全避免了这个问题。
    【解决方案4】:

    您可以像这样遍历 $cart_item['addons']:

    foreach ($cart_item['addons'] AS $key => &$value) {
        $value['price'] = 0;
    }
    

    (你的代码不会被执行,因为 $i 永远不会改变,所以永远不会 > 0)

    还要注意,在 foreach 循环中更改数组时需要使用引用 (&amp;$value)。

    【讨论】:

      【解决方案5】:

      您的 for 循环包含三个部分:for(counter | test | action){}。查看this guide for 循环可能对您有用。你初始化你的变量:

      $i = 0;
      

      然后你做一个逻辑检查(测试部分):

      $i > 0;
      

      如果我们用变量 ($i) 替换它所持有的值 (0),我们会得到:

      0 > 0
      

      这永远不会是真的,因此你永远不会到达 for 循环的最后部分(动作):

      $i++;
      

      相反,您可以让它循环,直到它像这样穿过整个数组:

      $elementCount = count(cart_item['addons']);
      for($i=0; $i < $elementCount; $i++){ 
          $cart_item['addons'][$i]['price'] = '0';
      }
      

      每次循环时,我们都会在$i 中加一,直到达到$i 不再小于数组中项目数的停止条件。

      同样值得注意的是PHPa number of functions 可以帮助处理数组。

      【讨论】:

        猜你喜欢
        • 2015-10-14
        • 1970-01-01
        • 2017-07-08
        • 2012-06-19
        • 1970-01-01
        • 1970-01-01
        • 2013-05-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多