试问一个2级多维数组改成n级? [英] How can a 2 level multidimensional array be changed to n levels?
问题描述
我有类似如下的数组:
阵列
(
[1g27] =>阵列
(
[42] => AAAAA
[52] => BBBBB
[4] => 2G4
)
[2G4] =>阵列
(
[9] => CCCCC
[14] => 3g14
[15] => 3g15
[20] => DDDDD
[34] => EEEEE
)
[3g14] =>阵列
(
[49] => FFFFF
)
[3g15] =>阵列
(
[50] => GGGGG
)
)
我想它变成像下面的数组:
阵列
(
[1g27] =>阵列
(
[42] => AAAAA
[52] => BBBBB
[2G4] =>阵列
(
[9] => CCCCC
[3g14] =>阵列
(
[49] => FFFFF
)
[3g15] =>阵列
(
[50] => GGGGG
)
[20] => DDDDD
[34] => EEEEE
)
)
请注意,原始阵列的值也原始数组中找到的键。当有一个值和一个阵列之间的比赛,我想数组替换值(和重命名该值的键)。
我已经试过的foreach和array_walk_recursive,但我不能弄明白。 (请参见下面的尝试只进1级深)。
功能充气($ flatree,$阵列)
{
全球$ inflatedtree;
的foreach($数组作为$ arraykey => $ arrayvalue)
{
$ inflatedtree [$ arraykey] = $ arrayvalue;
如果(array_key_exists($ arrayvalue,$ flatree))
{
$ inflatedtree [$ arrayvalue] = $ flatree [$ arrayvalue];
膨胀($ flatree,$ inflatedtree [$ arrayvalue]);
}
}
}
膨胀($ flatree,$ flatree ['1g27']);
使用此功能
,但是,给了我这样的:
阵列
(
[42] => AAAAA
[52] => BBBBB
[2G4] =>阵列
(
[9] => CCCCC
[14] => 3g14
[15] => 3g15
[20] => DDDDD
[34] => EEEEE
) [3g14] =>阵列
(
[49] => FFFFF
)
[3g15] =>阵列
(
[50] => GGGGG
)
)
我由一个地方之一,它的功能是充气的返回值取代全局变量$ inflatedtree()。这个返回值是新建立的分支。
函数充气($ flatree,$阵列)
{
$ inflatedtree =阵列();
的foreach($数组作为$ arraykey => $ arrayvalue){
如果(array_key_exists($ arrayvalue,$ flatree)){
$ inflatedtree [$ arrayvalue] =膨胀($ flatree,$ flatree [$ arrayvalue]);
}其他{
$ inflatedtree [$ arraykey] = $ arrayvalue;
}
}
返回$ inflatedtree;
}
我用一个函数的start()的初始调用为希望找回阵列。调用膨胀()直接将返回内阵列。
功能启动($ flatree,$键)
{
返回数组($关键=>膨胀($ flatree,$ flatree [$关键]));
}$ result_tree =启动($ flatree,'1g27');
I have an array like the following:
Array ( [1g27] => Array ( [42] => AAAAA [52] => BBBBB [4] => 2g4 ) [2g4] => Array ( [9] => CCCCC [14] => 3g14 [15] => 3g15 [20] => DDDDD [34] => EEEEE ) [3g14] => Array ( [49] => FFFFF ) [3g15] => Array ( [50] => GGGGG ) )
I would like it to become an array like the following:
Array ( [1g27] => Array ( [42] => AAAAA [52] => BBBBB [2g4] => Array ( [9] => CCCCC [3g14] => Array ( [49] => FFFFF ) [3g15] => Array ( [50] => GGGGG ) [20] => DDDDD [34] => EEEEE ) )
Notice that the values of the original array are also keys found in the original array. When there is a match between a value and an array, I want the array to replace the value (and rename that value's key).
I have tried foreach and array_walk_recursive, but I can't figure it out. (See following attempt which only goes 1 level deep.)
function inflate($flatree, $array) { global $inflatedtree; foreach ($array as $arraykey => $arrayvalue) { $inflatedtree[$arraykey] = $arrayvalue; if (array_key_exists($arrayvalue, $flatree)) { $inflatedtree[$arrayvalue] = $flatree[$arrayvalue]; inflate($flatree, $inflatedtree[$arrayvalue]); } } } inflate($flatree, $flatree['1g27']);
using this function, however, gives me this:
Array ( [42] => AAAAA [52] => BBBBB [2g4] => Array ( [9] => CCCCC [14] => 3g14 [15] => 3g15 [20] => DDDDD [34] => EEEEE ) [3g14] => Array ( [49] => FFFFF ) [3g15] => Array ( [50] => GGGGG ) )
I replaced the global variable $inflatedtree by a local one, which is the return value of the function inflate(). This return value is the new build branch.
function inflate($flatree, $array)
{
$inflatedtree = array();
foreach ($array as $arraykey => $arrayvalue) {
if (array_key_exists($arrayvalue, $flatree)) {
$inflatedtree[$arrayvalue] = inflate($flatree, $flatree[$arrayvalue]);
} else {
$inflatedtree[$arraykey] = $arrayvalue;
}
}
return $inflatedtree;
}
I use a function start() for the initial call to get back the array as wished. Calling inflate() directly will return the inner array.
function start($flatree, $key)
{
return array($key => inflate($flatree, $flatree[$key]));
}
$result_tree = start($flatree, '1g27');
这篇关于试问一个2级多维数组改成n级?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!