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

时间:2017-05-16 13:55:54

标签: php arrays multidimensional-array clone

我有以下问题。我有一个大型数组结构,我从一个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;
...
...

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

有没有办法克隆数组并添加子数组而不将所有值都分配给克隆数组?这会炸毁我的代码并且非常新颖,但是很有效。

3 个答案:

答案 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方法来正确克隆对象。