克隆数组并添加一个子数组

clone array and add a subarray

我有以下问题。我有一个大型数组结构,我从 sql 语句中赋值:

$data[$user][$month]['id'] = $data->id;
$data[$user][$month]['company'] = $data->company;
...
...

和大约 30 个其他值。

我需要克隆这个数组($data)并添加一个子数组,例如:

$data[$user][$month][$newsubarray]['id'] = $data->id;
$data[$user][$month][$newsubarray]['company'] = $data->company;
...
...

我需要克隆它,因为原始数组被许多模板用来显示数据。

有没有办法克隆数组并添加子数组而不将所有值分配给克隆数组?这破坏了我的代码并且是非常新的,但是有效。

您可以使用嵌套 foreach loops.

遍历数组

它看起来类似于:

foreach ($data as $user=>$arr2) {
    foreach ($arr2 as $month=>$arr3) {
        foreach ($arr3 as $key=>$value) {
            $data[$user][$month][$newsubarray][$key] = $value;
        }
    }
}

你的最后一层数组,你可以创建对象,用于保存数据并实现ArrayAccess。然后简单地通过引用,在需要的地方分配对象。这样,您可以持有 1 个对象并在多个地方使用它,但如果您改变一个对象 - 这就是全部改变。

然后你上瘾了,可以实现__clone方法来正确克隆对象。

可以使用array_map,勾选live demo

如果你想传递参数给array_map(),使用这个

array_map(function($v) use($para1, $para2, ...){...}, $array);

这是代码,

<?php

$array =array('user'=> array('month'=>array('id' =>2, 'company' => 3)));
print_r($array);
print_r(array_map(function($v){
  $arr = $v['month'];
  $v['month'] = [];
  $v['month']['newsubarray'] = $arr;
  return $v;}
, $array));