0

私はここにデータを持っています:

Array
(
[1] => Array
    (
        [SiteID] => 1
        [OwnerAID] => 1

    )

[3] => Array
    (
        [SiteID] => 3
        [OwnerAID] => 1

    )

[6] => Array
     (
        [SiteID] => 6
        [OwnerAID] => 2

     )
    )

OwnerAIDここで、を2つのカテゴリにグループ化する必要があります。最初のカテゴリは1つOwnerAIDだけを所有SiteIDし、2番目のカテゴリは1つOwnerAID以上を所有していSiteIDます。

プログラムを作って調べてみましたが、コードの出力が間違っています。

私のコードを見てください:

       public function groupIndividualAndAggregateSites()
    {

    $arrays = array();
        foreach($this->combined as $key => $key_value)
        {
            $SiteID = "";

        if ($SiteID == "") {

            $SiteID=array($key_value['SiteID']); }

           else {
                   $SiteID = array_merge((array)$SiteID, (array)$key_value['SiteID']);

                   $SiteID = array_unique($SiteID);

                }

       } if ($SiteID != "") {

       $arrays = array('AID'=>$key_value['AID'], 'Sites' => $SiteID);
     }
        print_r($arrays);

    }

結果は次のように表示されます。

 Array( 
        [1] => Array

      ( [Sites] => Array ([0] => 1, [1] => 3)))

 Array( 
        [2] => Array

      ( [Sites] => Array ([0] => [6]))
4

2 に答える 2

1

あなたが行くべきものは配列です:

$owners = array(
owner_1 => SiteID1, // int Only one site
owner_2 => array (SiteID2,SiteID3), // array Multiple sites
);

その後、次のような配列$ownersを使用します。

echo (is_array($owners[$owner_1]) ? 'Has multiple sites' : 'has one site';

これが、メモリフットプリントが小さいという基本的な考え方です。

例、テストされていません。

public function groupIndividualAndAggregateSites() {
  $owners = array();
  foreach($this->combined as $key => $value) {
    $owner_id = $value['OwnerAID'];
    $site_id = $value['SiteID'];

    if(array_key_exists($owner_id,$owners)) {
      // He has one or more sites already?
      if(is_array($owners[$owner_id]){
        array_push($owners[$owner_id],$site_id);
      } else {
      // User already has one site. Lets make an array instead and add old and new siteID
        $old_site_id = $owners[$owner_id];
        $owners[$owner_id] = array($old_site_id,$owner_id);
      }
    } else {
      $owners[$owner_id] = $site_id;
    }
return $owners;    
}
于 2012-08-11T15:45:01.573 に答える
0

あなたがする必要があるのはあなたの最初の配列をループし、それぞれOwnerAIDを関連する出力サブ配列に追加することです:によって決定されSiteIDます

$output = array(1=>array(), 2=>array());
foreach ($original as $v) $output[$v['SiteID'] == 1 ? 1 : 2][] = $v['OwnerAID'];

ここでは、次の機能を使用しています。

于 2012-08-11T15:41:11.843 に答える