如何在PHP中将数组分组到一个大数组中

如何在PHP中将数组分组到一个大数组中,php,arrays,multidimensional-array,array-merge,Php,Arrays,Multidimensional Array,Array Merge,我这里有数据: Array ( [3] => Array ( [SiteID] => 3 [Balance] => 94000.99 [MinBalance] => 100000.00 [MaxBalance] => 500000.00 [OwnerAID] => 17 [GroupID] => 1 [Deposit] =>

我这里有数据:

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 
    )
)
我需要将此数组分为两组:第一组-所有所有者ID拥有一个SiteID,第二组所有所有者ID拥有多个SiteID。有可能吗?结果应如下所示:

以下是在一个大数组中拥有一个SiteID的OwnerId组:

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 
            )
        )
    )    
}
在这里,OwnerId在另一个大阵列中拥有多个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); 
}

请帮帮我,先谢谢你。我希望有人能帮助我得出这样的结果。请以正确的方式指导我。

对不起,我发现阅读代码有点困难,所以我为您写了一个

$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'],
                                                 )))));
}

这将返回您想要的内容

    <?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);
    ?>


是否要使用相同的
OwnerAID对数组进行分组?否,我需要将OwnerAID分为两个大数组,第一个是具有一个SiteID的OwnerAID,第二个是具有多个SiteID的OwnerAID。请复习我的问题。谢谢。如果你不需要额外的3d阵列
[站点]
,我想我的答案中的代码会有所帮助。如果你需要它,我会尝试重写它。嗨,洛勒,如果你不介意的话,你能修改你的代码吗。请。谢谢。你能在我修改它之前尝试一下吗?嗨,林文煌,$new_数组有问题,出现了错误,请检查代码。请非常感谢。解析错误:语法错误,意外的T_双_箭头,请帮助我调试。非常感谢。@Wenhuang Lin,它以$new_数组开始,下面是错误:解析错误:语法错误,第314行调用堆栈上的/var/www/joy/autotoup/config.php中意外的T_双_箭头:0.0000 315440 1。{main}()/var/www/joy/autotoup/index.php:0