PHP递归数组拷贝
我有一个多维数组(下面的源代码),其中我的键和值是任意字符串。我想创建一个新的数组(如下所示),其中层次结构保持不变,但每个键都被重新构造为自己的数组,键本身成为“title”值,任何子数组都在“children”下继续 如何使用接受&$source和&$destination数组并相应地填充目标数组的递归函数来实现这一点 源阵列:PHP递归数组拷贝,php,arrays,recursion,multidimensional-array,Php,Arrays,Recursion,Multidimensional Array,我有一个多维数组(下面的源代码),其中我的键和值是任意字符串。我想创建一个新的数组(如下所示),其中层次结构保持不变,但每个键都被重新构造为自己的数组,键本身成为“title”值,任何子数组都在“children”下继续 如何使用接受&$source和&$destination数组并相应地填充目标数组的递归函数来实现这一点 源阵列: Array ( [Alpha] => Array ( [Red] => one [Blue] => two
Array (
[Alpha] => Array (
[Red] => one
[Blue] => two
)
[Bravo] => Array (
[Blue] => three
)
)
所需阵列:
Array (
[0] => Array (
[title] => Alpha
[children] => Array (
[0] Array([title] => Red, [children]= > false)
[1] Array([title] => Blue, [children]= > false)
)
)
[1] => Array (
[title] => Bravo
[0] Array([title] => Blue, [children]= > false)
)
)
)
注意:我不关心新数组中的最终节点/叶。您可以在不向目标数组传递引用的情况下进行te转换
function convert_array($from){
if(!is_array($from)){
return false;
}
$to = array();
foreach($from as $k=>$v){
$to[] = array(
'title' => $k,
'children' => convert_array($v)
);
}
return $to;
}
您可以在不向目标数组传递引用的情况下进行te转换
function convert_array($from){
if(!is_array($from)){
return false;
}
$to = array();
foreach($from as $k=>$v){
$to[] = array(
'title' => $k,
'children' => convert_array($v)
);
}
return $to;
}
我已经递归地对数组进行了编程
$a = array(
'Alpha' => array('Red' => 'one', 'Blue' => 'two'),
'Bravo' => array('Blue' => 'three'));
function copyarray($datas){
$arr = array();
if(is_array($datas)){
foreach($datas as $key => $val){
if(is_array($val)){
$arr[$key] = copyarray($val);
}else
$arr[$key]=$val;
}
}
return $arr;
}
echo "<pre>";print_r(copyarray($a));
$a=数组(
'Alpha'=>数组('Red'=>'one','Blue'=>'two'),
'Bravo'=>数组('Blue'=>'three');
函数copyarray($datas){
$arr=array();
if(is_数组($datas)){
foreach($key=>$val的数据){
if(is_数组($val)){
$arr[$key]=copyarray($val);
}否则
$arr[$key]=$val;
}
}
返回$arr;
}
回声“;打印(拷贝阵列($a));
我已经递归地对数组进行了编程
$a = array(
'Alpha' => array('Red' => 'one', 'Blue' => 'two'),
'Bravo' => array('Blue' => 'three'));
function copyarray($datas){
$arr = array();
if(is_array($datas)){
foreach($datas as $key => $val){
if(is_array($val)){
$arr[$key] = copyarray($val);
}else
$arr[$key]=$val;
}
}
return $arr;
}
echo "<pre>";print_r(copyarray($a));
$a=数组(
'Alpha'=>数组('Red'=>'one','Blue'=>'two'),
'Bravo'=>数组('Blue'=>'three');
函数copyarray($datas){
$arr=array();
if(is_数组($datas)){
foreach($key=>$val的数据){
if(is_数组($val)){
$arr[$key]=copyarray($val);
}否则
$arr[$key]=$val;
}
}
返回$arr;
}
回声“;打印(拷贝阵列($a));
谢谢,效果很好。顺便说一句,在foreach中使用$to[]与仅使用$to有什么意义?只有$to[]似乎有效,但$to在语法上仍然可以。使用$to[]
您将向数组添加一个元素(与使用array\u push
相同),使用$to
您每次都会覆盖数组。谢谢,效果很好。顺便说一句,在foreach中使用$to[]与仅使用$to有什么意义?似乎只有$to[]起作用,但$to在语法上仍然可以。使用$to[]
将元素追加到数组中(与使用数组\u push
相同),使用$to
每次都会覆盖数组。