Php 克隆阵列并添加子阵列

Php 克隆阵列并添加子阵列,php,arrays,multidimensional-array,clone,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][$

我有以下问题。我有一个大型数组结构,我从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 ($data as $user=>$arr2) {
    foreach ($arr2 as $month=>$arr3) {
        foreach ($arr3 as $key=>$value) {
            $data[$user][$month][$newsubarray][$key] = $value;
        }
    }
}

您可以使用嵌套数组遍历数组

它看起来与此类似:

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

在数组的最后一级,可以创建对象,用于通过实现
ArrayAccess
保存数据。然后简单地通过引用,将对象分配到所需的位置。通过这种方式,您可以持有一个对象并在多个位置使用它,但如果您在一个位置进行更改,则所有位置都会发生更改


然后,您可以实现
\u clone
方法来正确克隆对象。

您的最后一级数组,您可以通过实现
ArrayAccess来创建用于保存数据的对象。然后简单地通过引用,将对象分配到所需的位置。通过这种方式,您可以持有一个对象并在多个位置使用它,但如果您在一个位置进行更改,则所有位置都会发生更改


然后您可以使用
\u clone
方法正确克隆对象。

您可以使用数组映射,检查

如果要将参数传递给数组_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));

您可以使用数组映射,请检查

如果要将参数传递给数组_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));

$data[$user][$month][$newsubarray]=$data[$user][$month]类似的内容?
$data[$user][$month][$newsubarray]=$data[$user][$month]类似的内容?这样做有效,必须排除2个值,因为它们有一个摘要。非常感谢。这很有效,必须排除2个值,因为它们有一个摘要。非常感谢你。