2017-02-22 61 views
1

我從數據庫查詢創建了一個數組,該數據庫查詢包含我需要執行的一個新函數createList(),而不是結構方便。我目前想知道是否值得重建這個數組中的數據或者只是對數據庫做一個新的查詢。在這個過程中,我試圖創建最簡單的方法來將原始數組中的數據重建爲適合createList()函數的新數組。在foreach循環中爲數組中的相同鍵標識不同的/新值

原始數組的形式:

$original =  [0] => (
        'cgtitle' => 'tree' 
        'cstitle' => 'branch' 
        'cgorder' => 0 
        'csorder' => 0 
        ) 
       [1] => (
        'cgtitle' => 'tree' 
        'cstitle' => 'stick' 
        'cgorder' => 0 
        'csorder' => 1 
        ) 
       [2] => (
        'cgtitle' => 'tree' 
        'cstitle' => 'leaf' 
        'cgorder' => 0 
        'csorder' => 2 
        ) 
       [3] => (
        'cgtitle' => 'car' 
        'cstitle' => 'wheel' 
        'cgorder' => 1 
        'csorder' => 0 
        ) 
       [4] => (
        'cgtitle' => 'car' 
        'cstitle' => 'bumper' 
        'cgorder' => 1 
        'csorder' => 2 
        ) 
       etc. 

,我需要類似形式的數組:

$new =   ['tree'] => (
        'branch', 
        'stick', 
        'leaf' 
        ) 
       ['car'] => (
        'wheel', 
        'bumper' 
        ) 
       etc. 

目前我看不到一種巧妙的嵌套循環方法。我最好的嘗試是運行一個foreach循環的$原始創建一個新的數組($ cgArray)的cgtitle值。我運行$原第二foreach循環並放置cstitle$ cgArray鑰匙匹配它的兄弟cgtitle值內。訂單保存在$原始

是否有更好的方法比運行兩個不同的foreach迭代$ original?例如foreach循環中的一個函數,用於標記指定的鍵(cgitle)已從上次迭代更改,然後我可以在單個循環中構建$ new數組?

例如:

foreach ($original as $key => $value) { 
    if ([$_SESSION['cOrdered'][$key]['cgtitle'] is different from valye of last loop) { 
     $new[[$_SESSION['cOrdered'][$key]['cgtitle'] = array(); 
    } else { 
     array_push($new[[$_SESSION['cOrdered'][$key]['cgtitle'], $new[[$_SESSION['cOrdered'][$key]['cstitle']); 
    } 
) 

回答

1

我認爲這會工作。

$groups = []; 
foreach ($original as $value) { 
    $groups[$value['cgtitle']][] = $value['cstitle']; 
) 

var_dump($groups); 
+0

嗯,我覺得有點愚蠢,因爲忽視了這樣一個簡單的解決方案。非常感謝@Yada,完美的工作。 – biscuitstack