0

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

Array
(
    [3] => Array
    (
        [SiteID] => 3
        [Balance] => 94000.99
        [MinBalance] => 100000.00
        [MaxBalance] => 500000.00
        [OwnerAID] => 17
        [GroupID] => 1
        [Deposit] => 459000
        [Redemption] => 703576
        [Reload] => 169100
    )

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

    [139] => Array
    (
        [SiteID] => 139
        [Balance] => 855100.00
        [MinBalance] => 100000.00
        [MaxBalance] => 1000000.00
        [OwnerAID] => 23
        [GroupID] => 1
        [Deposit] => 0  
        [Redemption] => 0 
        [Reload] => 0 
    )
)

この配列を2つのグループにグループ化する必要があります。最初のグループ-1つのSiteIDを所有するすべてのOwnerAIDと、複数のSiteIDを所有するすべてのOwnerAID。それを作ることは可能ですか?結果は次のように表示されます。

これは、1つの大きな配列で1つのSiteIDを所有するOwnerAIDのグループです。

Array
(
    [17] => Array
    (
        [Sites] => Array 
        (
            [0] => Array
            (
                [SiteID] => 3 
                [Balance] => 94000.99  
                [MinBalance] => 100000.00   
                [MaxBalance] => 500000.00  
                [OwnerAID] => 17  
                [GroupID] => 1 
                [Deposit] => 459000  
                [Redemption] => 703576 
                [Reload] => 169100 
            )
        )
    )    
}

ここで、OwnerAIDは別の1つの大きな配列に複数のSiteIDを所有しています。

Array
 (
    [83] => Array
    (
        [Sites] => Array 
        (
        [0] => Array
        (
            [SiteID] => 2
            [Balance] => 19000.00
            [MinBalance] => 100000.00
            [MaxBalance] => 1000000.00
            [OwnerAID] => 83
            [GroupID] => 1
            [Deposit] => 1500
            [Redemption] => 1000
            [Reload] => 1000
        ) 
        [1] => Array
        (
            [SiteID] => 149
            [Balance] => 150000.00
            [MinBalance] => 100000.00
            [MaxBalance] => 250000.00
            [OwnerAID] => 83
            [GroupID] => 1
            [Deposit] => 0
            [Redemption] => 0
            [Reload] => 0
        )
    )
)

誰かが私にこのコードを提案しましたが、私はすでにそれを変更しました。私はこのコードを変更するためにいくつかの調査を行います。このような結果を達成するために私を助けてください。私の質問に答えるのを辛抱強く待ってください。私はPHPでのプログラミングの世界の初心者です。コードは次のとおりです。

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.  
                // Make an array instead and add old and new siteID
                $old_site_id = $owners[$site_id];
                $owners[$owner_id] = array_merge((array)$value, array($old_site_id));
            }
        } else {
            $owners[$owner_id] = array($value,'Sites'=> array($site_id));
        }
    }
    print_r($owners); 
}

助けてください、そしてよろしくお願いします。誰かが私がこの種の結果を思い付くのを手伝ってくれることを願っています。適切な方法で私を導いてください。

4

2 に答える 2

0

申し訳ありませんが、コードを読むのは少し難しいので、あなたのためにコードを書きます。

$new_array=array();
foreach($old_array as $site)
{
    $siteList=array();
    if(isset($new_array[$site['OwnerAID']]['Sites']))
        $siteList=$new_array[$site['OwnerAID']]['Sites'];
    $new_array=array_merge($new_array,array($site['OwnerAID']=>array_merge($siteList,$site['SiteID']=>array('Sites'=>array(
                                                 'SiteID'=>$site['SiteID'],
                                                 'Balance'=>$site['Balance'],
                                                 'MinBalance'=>$site['MinBalance'],
                                                 'MaxBalance'=>$site['MaxBalance'],
                                                 'OwnerAID'=>$site['OwnerAID'],
                                                 'GroupID'=>$site['GroupID'],
                                                 'Deposit'=>$site['Deposit'],
                                                 'Redemption'=>$site['Redemption'],
                                                 'Reload'=>$site['Reload'],
                                                 )))));
}
于 2012-08-13T07:36:21.890 に答える
0

これはまさにあなたが望むものを返します。

    <?php

//Array declaration
    $arr = Array
    (
        3 => Array
        (
            "SiteID" => 3,
            "Balance" => 94000,
            "MinBalance" => 100000.00,
            "MaxBalance" => 500000.00,
            "OwnerAID" => 17,
            "GroupID" => 1,
            "Deposit" => 459000,
            "Redemption" => 703576,
            "Reload" => 169100,
        ),

        2 => Array
        (
            "SiteID" => 2,
            "Balance" => 19000.00,
            "MinBalance" => 100000.00,
            "MaxBalance" => 1000000.00,
            "OwnerAID" => 83,
            "GroupID" => 1,
            "Deposit" => 1500,
            "Redemption" => 1000,
            "Reload" => 1000,
        ),

        139 => Array
        (
            "SiteID" => 139,
            "Balance" => 855100.00,
            "MinBalance" => 100000.00,
            "MaxBalance" => 1000000.00,
            "OwnerAID" => 83,
            "GroupID" => 1,
            "Deposit" => 0,
            "Redemption" => 0 ,
            "Reload" => 0 
        ),
      );


//End of declaration;
//Too lazy for other comments, sorry xD


    foreach ($arr as $key => $value) {
        $Newarr[$value["OwnerAID"]][] = $value; 
    }
    foreach ($Newarr as $key => $value) {
        foreach ($value as $key2 => $value2) {          
        if (count($value) == 1)
            $arrOneSite[$value2["OwnerAID"]]["Sites"][] = $value2;
            else    
                $arrMoreThenOneSite[$value2["OwnerAID"]]["Sites"][] = $value2;
        }
    }

    echo "<pre>";
    print_r($arrOneSite);
    print_r($arrMoreThenOneSite);
    ?>
于 2012-08-13T09:03:59.733 に答える