2013-08-18 203 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; 
    } 
}