1

ここにデータがあります:

 Array
 (
 [3] => Array
    (
        [SiteID] => 3
        [Balance] => 19000.00
        [MinBalance] => 100000.00
        [MaxBalance] => 1000000.00
        [OwnerAID] => 17
        [GroupID] => 1
        [Deposit] => 1500
        [Redemption] => 1000
        [Reload] => 1000
    )

  [3] => Array
    (
        [SiteID] => 3
        [Balance] => 19000.00
        [MinBalance] => 100000.00
        [MaxBalance] => 1000000.00
        [OwnerAID] => 211
        [GroupID] => 1
        [Deposit] => 1500
        [Redemption] => 1000
        [Reload] => 1000
    )


   [4] => Array
    (
        [SiteID] => 4
        [Balance] => 19000.00
        [MinBalance] => 100000.00
        [MaxBalance] => 1000000.00
        [OwnerAID] => 17
        [GroupID] => 1
        [Deposit] => 1500
        [Redemption] => 1000
        [Reload] => 1000
    )

    [4] => Array
    (
        [SiteID] => 4
        [Balance] => 19000.00
        [MinBalance] => 100000.00
        [MaxBalance] => 1000000.00
        [OwnerAID] => 12
        [GroupID] => 1
        [Deposit] => 1500
        [Redemption] => 1000
        [Reload] => 1000
    )

        [5] => Array
        (
            [SiteID] => 2
            [Balance] => 19000.00
            [MinBalance] => 100000.00
            [MaxBalance] => 1000000.00
            [OwnerAID] => 11
            [GroupID] => 1
            [Deposit] => 1500
            [Redemption] => 1000
            [Reload] => 1000
        )
      )
   )

次に、同じ SiteID を所有する OwnerAID のリストを指す「CorpAID」という名前の新しいキーを作成する必要があります。これは、SiteID を 1 つ以上の OwnerAID が所有できることを意味します。結果は次のように表示されます。

Array 
(
 [0]=> Array
 (
    [SiteID] => 3
    [Balance] => 19000.00
    [MinBalance] => 100000.00
    [MaxBalance] => 1000000.00
    [OwnerAID] => 17
    [GroupID] => 1
    [Deposit] => 1500
    [Redemption] => 1000
    [Reload] => 1000
    [CorpAID] => Array
                (
                   [0] => 17
                   [1] => 211
                )
             )
   [1]=> Array
(
    [SiteID] => 3
    [Balance] => 19000.00
    [MinBalance] => 100000.00
    [MaxBalance] => 1000000.00
    [OwnerAID] => 17
    [GroupID] => 1
    [Deposit] => 1500
    [Redemption] => 1000
    [Reload] => 1000
    [CorpAID] => Array
                (
                   [0] => 12
                   [1] => 17
                )
             )          

それを作ることは可能ですか?私を助けて、適切な方法で私を導いてください。よろしくお願いします。

4

3 に答える 3

1

これはテストされていないコードですが、何が起こっているのかを読むのはある程度直感的です。SiteIDがグループ化するフィールドであると想定しています。

は、何度も入力するのを避けるための$tmp =&$out[$record['SiteID']];単なるショートカット$out[$record['SiteID']]です。

$out = array();

foreach ($records as $record) {
    $tmp = &$out[$record['SiteID']];
    if (isset($tmp)) {
        $tmp['CorpAID'][] = $record['OwnerAID'];
    } else {
        $tmp = $record;
        $tmp['CorpAID'] = array($record['OwnerAID']);
    }
}

ところで、MySQL では、PHP での作業を簡単にするためにこれを行うこともできます。

SELECT GROUP_CONCAT(OwnerAID) AS CorpAID
FROM ...
GROUP BY SiteID;
于 2012-08-14T07:47:36.330 に答える
0

探しているものを実現するには、値を繰り返し処理し、CorpAID各エントリに新しいフィールドを割り当てる必要があります。そのCorpAIDフィールドは、SiteID各ごとの反復で構築される値への参照である必要がありますOwnerAID

参照を最初の要素に割り当てるとき、それらはまだ完全には埋められていないため、参照は重要です。これは、作成時に、OwnerAIDごとに複数の参照が存在する可能性があるためですSiteID

このサウンドは複雑で、コードは小さくなります。これは参照を利用するため、後でクリーンアップするために設定を解除します。

$table = array();
foreach($data as &$item)
{    
    $item['CorpAID'] = &$table[$item['SiteID']];
    $item['CorpAID'][] = $item['OwnerAID'];
}
unset($item);
unset($table);

ただし、サイト情報(データに頻繁に複製される)を所有者情報から分離することで、さらに多くのメリットを得ることができます。上記と同様に機能します。

于 2012-08-14T08:33:11.537 に答える
0

多次元配列でキーと値を比較する小さな関数を作成することをお勧めします。

function findInArray($key, $value, $array){
    foreach($array as $key=>$row){
      if(array_key_exists($key, $row){
           if($row[$key] == $value)
                    return $key;
         }
   }
   return -1;
}

次に、配列foreachを実行して値を正しい場所に設定します。結果の配列に が既に存在するかどうかを検索し、SiteIDそうでない場合はそれをセットに追加します。このようにして、重複したエントリを回避します(投稿された例ではそれを望まないようです):OwnerAIDCorpAID

$result_array = array();
foreach($array as $row){
 $key = findInArray('SiteID', $row['SiteID'], $result_array);
  if($key == -1){
           $temp = $row;
           $temp['CorpAID'] = array($row['OwnerAID']);
           $result_array[] = $temp;
          }
  else {
     if(findInArray('CorpAID', $row['OwnerAID'], $result_array) == -1){
            $result_array[$key]['CorpAID'][] = $row['OwnerAID'];
        }
  }
}
于 2012-08-14T07:48:04.350 に答える