如何在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