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 が既に配列にある場合は、既存の値に評価の値を追加 (+) します。

見つかったいくつかのループを適応させようとしましたが、適切に機能していないようです。

これが進むべき道であるかどうかわからないし、とにかくそれを行う方法がわからないので、どんな提案も大歓迎です.

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 に答える