我有一个带有键-值对的标准数组-我想使用键将其转换为多维数组。困难似乎是我需要递归地循环未知数量的新键,并将它们转换为多维数组。简而言之,我想要这样:
$val[alfa.xray.uno] = "Some value";
=> $val['alfa']['xray']['uno'] = "Some value";
例子:
(代码失败,并且还需要处理N个维度-但您知道了。)
$arr['alfa.xray.uno'] = "Alfa X-Ray Uno";
$arr['alfa.yaho.duo'] = "Alfa Yaho Duo";
$arr['beta.xray.uno'] = "Beta X-Ray Uno";
$arr['beta.xray.duo'] = "Beta X-Ray Duo";
$arr['just-me'] = "Root-level item";
print_r( array_flat_to_multidimensional($arr) );
function array_flat_to_multidimensional($arr) {
foreach($arr as $key=>$val) {
$key = explode(".",$key);
for($i=0; $i<count($key); $i++) {
if($i==0) { $out[$key[$i]] = $val; }
else if($i==1) { $out[$key[$i-1]][$key[$i]] = $val; }
else if($i==2) { $out[$key[$i-2]][$key[$i-1]][$key[$i]] = $val; }
else if($i==3) { $out[$key[$i-3]][$key[$i-2]][$key[$i-1]][$key[$i]] = $val; }
}
}
return $out;
}
也许RecursiveArrayIterator可以解决问题?
最佳答案
您可以使用引用来依次遍历并构建嵌套的数组结构:
$out = array();
foreach ($arr as $key=>$val) {
$r = & $out;
foreach (explode(".", $key) as $key) {
if (!isset($r[$key])) {
$r[$key] = array();
}
$r = & $r[$key];
}
$r = $val;
}
return $out;
关于php - 将平面数组转换为分层的多维数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6088115/