我有一个包含以下值的数组:
array (
array(a, a, a),
array(a, a, b),
array(a, b, a),
array(b, c, d)
)
我想将此数组转换为具有关联数组的树,如下所示:
array (
a => array (
a => array(a, b),
b => array(a)
),
b => array (
c => array(d)
)
)
我试图解决这个问题几个小时。有谁知道这个问题的解决方案?第一个数组的值来自mysql数据库,它们是有序的。
答案 0 :(得分:0)
只有两个级别:
$a = array (
array(a, a, a),
array(a, a, b),
array(a, b, a),
array(b, c, d)
);
$out = array();
foreach ($a as $row) {
$out[$row[0]][$row[1]][] = $row[2];
}
echo '<pre>';
print_r($out);
// http://phpfiddle.org/main/code/tcb-fwz
修改强> 使用基于数组长度的最大深度:
$input = array(
array('a', 'a', 'a', 'z'),
array('a', 'a', 'c', 'z'),
array('a', 'a', 'a', 'y'),
);
$result = array();
foreach ($input as $row) {
for ($i = count($row)-1; $i >=0; $i--) {
if (!isset($work)) {
$work = array($row[$i]); //last item
}else{
$work = array($row[$i]=>$work);
}
}
$result = array_merge_recursive($result, $work);
unset($work);
}
echo '<pre>';
print_r($result);
//在http://phpfiddle.org/main/code/1ag-4cj
如果$ input数组元素是长度不同的数组,则会出现问题。
答案 1 :(得分:0)
$result = array();
foreach ($initial_array as $row) {
$result[$row[0]][$row[1]][] = $row[2];
}
代码可以轻松更改,因此它适用于生成树的任何深度。