我目前有以下数组:
$options = array(
'a' => 'Test 1',
'b' => '-Test 2',
'c' => '-Test 3',
'd' => '--Test 4',
'e' => '--Test 5',
);
我想在多级数组中对其进行转换,每个虚线表示一个级别更深。所以这个数组应该成为:
Array(
[Test 1], => Array(
[b] => 'Test 2',
[Test 3] => Array(
[d] => 'Test 4',
[e] => 'Test 5',
)
)
)
我目前的工作深度为一级,但我想创建一个能够处理任何深度级别的函数。这就是我现在所做的:
$list = array();
foreach ($options as $key => $value) {
if($value[0] == '-') {
if (!isset($list[$lastvalue])) {
unset($list[$lastkey]);
$list[$lastvalue] = array();
}
$value = substr($value, 1); // remove the leading dash
$list[$lastvalue][$key] = $value;
}
else {
$list[$key] = $value;
$lastkey = $key;
$lastvalue = $value;
}
}
答案 0 :(得分:1)
罗马的一种方式......
$opt = array(
'a' => 'Test 1',
'b' => '-Test 2',
'c' => '-Test 3',
'd' => '--Test 4',
'e' => '--Test 5',
);
$tmp=array(); $lvl=null;
foreach(array_reverse($opt) as $idx => $set){
$clean = ltrim($set,'-');
if(!is_null($lvl)){
if($lvl == substr_count($set,'-')){
$tmp[$idx] = $clean;
} else {
$_tmp[$clean]=is_array($tmp)?$tmp:ltrim($tmp,'-');
$tmp = $_tmp;
$_tmp = array();
$lvl = substr_count($set,'-');
}
} else {
$lvl = substr_count($set,'-');
$tmp[$idx] = $clean;
}
}
print '<pre>';
print_r($tmp);
print '</pre>';
结果:
Array
(
[Test 1] => Array
(
[Test 3] => Array
(
[e] => Test 5
[d] => Test 4
)
[b] => Test 2
)
)
如果给定的数组是正确的,那么也可以使用更深层次。