2016-02-19 35 views
0

作爲努力建設一個位,從而建立相關的下拉JSON的墊腳石,我想改變這個陣列...轉化多維數組

Array 
(
    [0] => Array 
     (
      [id] => 4 
      [project_id] => 2289 
      [task] => Drawing 
     ) 

    [1] => Array 
     (
      [id] => 5 
      [project_id] => 2289 
      [task] => Surveying 
     ) 

    [2] => Array 
     (
      [id] => 6 
      [project_id] => 2289 
      [task] => Meeting 
     ) 

    [3] => Array 
     (
      [id] => 1 
      [project_id] => 2282 
      [task] => Folding 
     ) 

    [4] => Array 
     (
      [id] => 2 
      [project_id] => 2282 
      [task] => Printing 
     ) 

    [5] => Array 
     (
      [id] => 3 
      [project_id] => 2282 
      [task] => Cutting 
     ) 

) 

..to這樣的事情...

Array 
(
    [0] = Array 
     (
     [project_id] => 2289 
     [task] => Array 
        (
        [0] => Drawing 
        [1] => Surveying 
        [2] => Meeting 
       ) 
     ) 
    [1] = Array 
     ( 
     [project_id] => 2282 
     [task] => Array 
        (
        [0] => Folding 
        [1] => Printing 
        [2] => Cutting 
       ) 
     ) 

) 

使用...

$newArray = array(); 
foreach ($array as $row) 
{ 
    $newArray[$row['project_id']][] = $row['task']; 
} 

...我能得到這個...

Array 
(
    [2289] => Array 
     (
      [0] => Drawing 
      [1] => Surveying 
      [2] => Meeting 
     ) 

    [2282] => Array 
     (
      [0] => Folding 
      [1] => Printing 
      [2] => Cutting 
     ) 

) 

...但我已經忘記了如何以包括結果關聯鍵

+0

你必須把'project_id'分開組,它需要是唯一的,你擁有的那個已經很好 – Ghost

回答

0

就指派他們,你想,在一個指數project id,並且task不斷推動它還有:

$newArray = array(); 
foreach ($array as $row) { 
    $newArray[$row['project_id']]['project_id'] = $row['project_id']; 
    $newArray[$row['project_id']]['task'][] = $row['task']; 
} 
$newArray = array_values($newArray); // reindex 
// removes `$row['project_id']` on each group 

注意:只需使用array_values即可重設您在project id分組中使用的分組密鑰。

+0

我*討厭*你看起來多麼容易!謝謝。 :-) – Strawberry

+0

@Strawberry對你已經擁有的那個有一點修改,很高興幫助,歡呼 – Ghost

+0

我試圖增加一小部分複雜性 - 但我仍然認爲它錯了。你碰巧知道這種事情的一個很好的教程? – Strawberry

1

您可以將foreach只需使用指數修改:

$newArray = array(); 
$index = array(); 
foreach ($array as $row) 
{ 
    $found = array_search($row['project_id'], $index); 
    if($found === False) 
    { 
     $found = array_push($newArray, array('project_id' => $row['project_id']))-1; 
     $index[$found] = $row['project_id']; 
    } 
    $newArray[ $found ]['task'][] = $row['task']; 
} 

eval.in demo

當一個新的project_id鍵被發現,它被添加到$index陣,所以 - 搜索爲它在下一個循環 - 我可以檢索相應的多維數組的索引。