2013-08-18 252 views
0

我有小例子如下創建多維數組

Array (2) 
system => Array (1) 
    system_id => 3 
proc => Array (4) 
    proc_id => 5 
    proc_or => 1 
    proc_owner => 7751 
    results => Array (7) 
    0 => Array (5) 
     process_id => 101 
     process => 1335 
     process_name => xa 
     process_owner => xo 
     rating => 67.554 
    1 => Array (6) 
     process_id => 122 
     process => 1335 
     process_name => xa 
     process_owner => xo 
     rating => 33.554 
     proc_rel => xf  
    2 => Array (5) 
     process_id => 101 
     process => 1227 
     process_name => xd 
     process_owner => xa 
     rating => 123.78 
    3 => Array (8) 
     process_id => 101 
     process => 1291 
     process_name => xa 
     process_owner => xo 
     rating => 64.241 
     proc_rel => xf 
     proc_rel_id => 1474 
     proc_rel_owner => xm 

我需要能夠組織這使得它僅包含獨特PROCESS_ID值的數組唯一的ID,所以結果2和3將被移除並且對於剩餘唯一ID的評級是具有該ID的記錄的所有評級的總和,因此結果0評級ID將成爲結果0 2和3的總和。

有成千上萬的記錄,因此它不適合在沒有某種自動化循環的情況下做到這一點

我正在考慮創建一個新陣列並且正在處理它

如果process_id不在新數組中,請將其添加到所有相關數據中 如果進程ID已經在數組中,只需將該值添加(+)的評級爲現有價值。

我試圖去適應幾個循環,發現了一些,但他們似乎沒有正常工作。

不知道這是否是要走的路,我不知道如何做到這一點,所以任何建議非常感謝。

+0

數據在哪裏產生。如果來自數據庫,則可以設置查詢來調整輸出。 – jeff

回答

1

如果數據集很大,那麼最好嘗試調整數據庫查詢或更改生成的文件結構。如果不可能,那麼唯一合理的方法是創建新陣列:

$newArray =(); 
foreach($array['proc']['results'] as $result) { 
    if (isset($newArray[$result['process_id']]) { 
     $newArray[$result['process_id']]['rating'] += $result['rating']; 
    } else { 
     $newArray[$result['process_id']] = $result; 
    } 
}