我有以下问题。我有一个大型数组结构,我从一个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;
...
...
我需要克隆它,因为许多模板使用原始数组来显示数据。
有没有办法克隆数组并添加子数组而不将所有值都分配给克隆数组?这会炸毁我的代码并且非常新颖,但是很有效。
答案 0 :(得分:2)
您可以使用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));
答案 1 :(得分:1)
您可以使用嵌套的foreach loops迭代数组。
看起来与此类似:
foreach ($data as $user=>$arr2) {
foreach ($arr2 as $month=>$arr3) {
foreach ($arr3 as $key=>$value) {
$data[$user][$month][$newsubarray][$key] = $value;
}
}
}
答案 2 :(得分:0)
您的最后一级数组,您可以创建对象,用于通过实现ArrayAccess
来保存数据。然后简单地通过引用,在期望的地方分配对象。通过这种方式,您可以容纳1个对象并将其用于多个位置,但如果您更改为一个 - 这一切都会发生变化。
然后你就是addictionaly,可以实现__clone
方法来正确克隆对象。