我有一个像这样的数组:
Array (
[0] => Array
(
[term_id] => 23
[name] => testasdf
[depth] => 1
)
[1] => Array
(
[term_id] => 26
[name] => asdf
[depth] => 2
)
[2] => Array
(
[term_id] => 31
[name] => Another level deep
[depth] => 3
)
[3] => Array
(
[term_id] => 32
[name] => Another level deep
[depth] => 2
)
[4] => Array
(
[term_id] => 24
[name] => testasdf
[depth] => 1
)
[5] => Array
(
[term_id] => 27
[name] => asdf
[depth] => 1
)
)
这是我正在使用的递归函数,除了在某些情况下(深度似乎更大),它可以工作。
function process(&$arr, &$prev_sub = null, $cur_depth = 1) {
$cur_sub = array();
while($line = current($arr)){
if($line['depth'] < $cur_depth){
return $cur_sub;
}elseif($line['depth'] > $cur_depth){
$prev_sub = $this->process($arr, $cur_sub, $cur_depth + 1 );
}else{
$cur_sub[$line['term_id']] = array('term_id' => $line['term_id'], 'name' => $line['name']);
$prev_sub =& $cur_sub[$line['term_id']];
next($arr);
}
}
return $cur_sub;
}
结果如下:
Array
(
[23] => Array
(
[26] => Array
(
[31] => Array
(
[term_id] => 31
[name] => Another level deep
)
)
[32] => Array
(
[term_id] => 32
[name] => Another level deep
)
)
[24] => Array
(
[term_id] => 24
[name] => testasdf
)
[27] => Array
(
[term_id] => 27
[name] => asdf
)
)
任何想法我可以有它,所以term_id和名称显示所有深度?
try this:
function process(&$arr, &$prev_sub = null, $cur_depth = 1) {
$cur_sub = array();
while($line = current($arr)){
if($line['depth'] < $cur_depth){
return $cur_sub;
}
if($line['depth'] > $cur_depth){
$prev_sub = $this->process($arr, $cur_sub, $cur_depth + 1 );
}
$cur_sub[$line['term_id']] = array('term_id' => $line['term_id'], 'name' => $line['name']);
$prev_sub =& $cur_sub[$line['term_id']];
next($arr);
}
return $cur_sub;
}