2012-06-18 53 views
1

这里从CMS函数返回我的数据:PHP - 将数据转换的平板阵列分层的多维数组

array (
0 => 
stdClass::__set_state(array(
'term_id' => '31', 
'parent' => '26' 
)), 
1 => 
stdClass::__set_state(array(
'term_id' => '3', 
'parent' => '0' 
)), 
2 => 
stdClass::__set_state(array(
'term_id' => '32', 
'parent' => '26' 
)), 
3 => 
stdClass::__set_state(array(
'term_id' => '33', 
'parent' => '26' 
)), 
4 => 
stdClass::__set_state(array(
'term_id' => '34', 
'parent' => '26' 
)), 
5 => 
stdClass::__set_state(array(
'term_id' => '26', 
'parent' => '3' 
)), 

我需要上述转换为以下格式:

Array 
(
[0] => Array 
    (
     3 
    ) 
[1] => Array 
    (
     26 
    ) 
[2] => Array 
    (
     31 
     32 
     33 
     34 
    ) 
) 

所以让我解释。源中的每个项目都是一个术语。每个学期有一个ID (term_id)和一个父母(parent)。如果父母== 0,它没有父母,并且级别为0.任何级别0的子项都是级别1,依此类推。

我想要返回的是一个数组,其中包含所有级别及其ID在该级别。

请注意,这只是示例数据,每个级别上可能会有更多级别和任意数量的ID。

所以使用PHP我该如何实现我所追求的?

回答

4

假设有效结构通过数据(没有孤儿和这样),可以循环和采摘每个下一级别,直到没有更多的数据左:

$output = array(); 
$current = array(0); 
$index = 0; 

while (! empty($data)) { 
    $parents  = $current; 
    $current  = array(); 
    $output[$index] = array(); 

    foreach ($data as $key => $term) { 
     if (in_array($term->parent, $parents)) { 
      $output[$index][] = $term->term_id; 
      $current[]  = $term->term_id; 
      unset($data[$key]); 
     } 
    } 

    $index ++; 
} 

var_dump($output); 
0

我认为你需要更多的数据。例如,父母= 26的对象在第2级。你现在怎么做?你需要有另一个数组,你将拥有parent_id及其级别。然后你可以遍历数组并构建你想要的东西。如果这是multidemnsional阵列可以使用array_walk_recursive

+2

_For例如与父对象= 26处第2级你怎么现在?_通过确定哪个级别ID'26'首先,从那些有'0'开始。这在WordPress中是非常充足和典型的层次结构数据。 :) – Rarst

+0

他从来没有提到它是WordPress的。 – Zefiryn

+0

其实并不重要,只是提出数据就足够了,WP对于上下文来说只是琐事。 – Rarst