2012-07-20 113 views
1

說我有一個代表id鍵和值的數組代表parent轉換一個一維數組到嵌套陣的關係鍵

4 => 0 
2 => 0 
5 => 2 
6 => 5 
8 => 0 
9 => 0 
10 => 8 
12 => 0 
13 => 0 
14 => 0 
18 => 7 
19 => 18 
20 => 19 
21 => 20 
22 => 21 
23 => 22 
24 => 23 
28 => 20 
7 => 5 

你也可以看這是一個對象:

{ 
    id  : 4, 
    parent : 0 
    } // etc... 

多維數組我想從這個實現是:

4 => 0 
2 => 5 
     => 6 
     => 7 
      => 18 
       => 19 
         => 20 
          => 21 
           => 22 
             => 23 
              => 24 
          => 28 
8 => 10 
9 => 0 
12 => 0 
13 => 0 
14 => 0 

我該如何去做這件事?

+1

.........什麼? – 2012-07-20 09:22:43

+0

似乎**圖形**(在計算機科學)? – 2012-07-20 09:30:11

+0

當然聞起來像功課 – Pete 2012-07-20 09:31:59

回答

3

如果你寫了一個小助手功能,以您的數據返工類似的結構:

$input = array(
    array('id' => '4', 'parent' => '0'), 
    // ... 
); 

可能喜歡的東西來實現:

$data = array_map(function ($entry) { 
    list($id, $parent) = array_map('trim', explode('=>', $entry)); 
    return array(
    'id' => $id, 
    'parent' => $parent 
); 
}, explode("\n", $data)); 

然後你可以使用函數我以類似的question使用:

function flatToNested($d, $r = 0, $p = 'parent', $k = 'id', $c = 'children') { 
    $m = array(); 
    foreach ($d as $e) { 
    isset($m[$e[$p]]) ?: $m[$e[$p]] = array(); 
    isset($m[$e[$k]]) ?: $m[$e[$k]] = array(); 
    $m[$e[$p]][] = array_merge($e, array($c => &$m[$e[$k]])); 
    } 
    return $m[$r]; 
} 

以產生嵌套數組:

$nested = flatToNested($data); 

演示:http://codepad.viper-7.com/HAZxaA

+1

如果這些值是字符串,即id =>'node-4',parent ='node-0',而不是id = 4等,那該怎麼辦?我怎樣才能修改這個功能? – pat34515 2012-07-20 10:39:43

+0

@Patrick我不認爲這應該是一個問題,只要他們是獨特的'flatToNested'將正確處理它。 – Yoshi 2012-07-20 10:44:06

+0

是否可以發佈整個代碼,例如在[codepad.org](http://www.codepad.org) – Yoshi 2012-07-20 10:48:19