【问题标题】:Modify array during multiple foreach loop iterations在多个 foreach 循环迭代期间修改数组
【发布时间】:2019-12-18 16:23:43
【问题描述】:

我必须更新具有 4 个 foreach 循环的数组的数据,

     foreach ($dta['hotels']['hotels'] as $key => &$value) {
      foreach ($value['rooms'] as $key1 => $value1) {
        foreach ($value1['rates'] as $key2 => $value2) {
          foreach ($value2['shiftRates'] as $key3 => &$value3) {
            $value3['net'] = 0.000072*$value3['net'];
            $value3['sellingRate'] = 0.000072*$value3['sellingRate'];
            var_dump($value3['sellingRate']);
          }
        }
      }
      $value['currency'] = 'USD';
    }

我想更新非常深的第 4 次 foreach 循环的数据,它不会更新数据,因为第一次循环数据更新是可能的。

我尝试输入“&”,但在第一个循环中它起作用了,在第四个循环中它不起作用。

任何可能的解决方案?

【问题讨论】:

    标签: php arrays loops foreach


    【解决方案1】:

    你有所有的键,你可以用它们来修改你的值:

    $dta['hotels']['hotels'][$key]['rooms'][$key1]['rates'][$key2]['shiftRates'][$key3]['sellingRate'] = 0.000072 * $value3['sellingRate'];
    

    【讨论】:

      【解决方案2】:

      只要数组中的其他位置没有您不想修改的其他 netsellingRate 键,您可以使用 array_walk_recursive 更简单地执行此操作。

      array_walk_recursive($dta, function(&$value, $key) {
          if ($key === 'net' || $key === 'sellingRate') {
              $value *= 0.000072;
          }
      });
      

      【讨论】:

        猜你喜欢
        • 2013-01-15
        • 2017-03-04
        • 1970-01-01
        • 2012-08-02
        • 1970-01-01
        • 1970-01-01
        • 2011-12-30
        • 2023-03-15
        • 2021-08-03
        相关资源
        最近更新 更多