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 值,因此将删除结果 2 和 3,并且剩余唯一 id 的评级是具有该 id 的记录的所有评级的总和,因此结果为 0 评级id 将成为结果 0 2 和 3 的总和。

有数千条记录,因此如果没有某种自动循环,这样做是不切实际的

我正在考虑可能创建一个新数组并在处理它时

如果 process_id 不在新数组中,则添加它和所有相关数据如果进程 id 已经在数组中,只需将 rating 的值添加 (+) 到现有值。

我试图调整我发现的几个循环,但它们似乎无法正常工作。

不确定这是否是要走的路,我也不知道该怎么做,所以任何建议都非常感谢。

4

1 回答 1

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;
    }
}
于 2013-08-18T09:14:53.823 回答