在多次foreach循环迭代期间修改数组

时间:2019-12-18 16:23:43

标签: php arrays loops foreach

我必须更新具有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循环的数据,这不是更新数据,因为第一个循环的数据可能会更新。

我尝试放入“&”,但是在第一个循环中它起作用了,在第四个循环中它没有起作用。

任何可能的解决方案吗?

2 个答案:

答案 0 :(得分:2)

您拥有所有键,可以使用这些键来修改您的值:

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

答案 1 :(得分:0)

只要您不想修改数组中其他位置的其他netsellingRate键,就可以使用array_walk_recursive来更简单地做到这一点。 / p>

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