克隆数组并添加一个子数组
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));
我有以下问题。我有一个大型数组结构,我从 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));