从多维数组创建唯一ID

时间:2013-08-18 08:45:54

标签: php

我有一个数组,下面有一个小例子

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的值添加(+)到现有值。

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

不确定这是否可行,我不知道该怎么做,所以任何建议都非常感谢。

1 个答案:

答案 0 :(得分: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;
    }
}