具有唯一值的PHP关联数组合并
我有一个数组,看起来像这样具有唯一值的PHP关联数组合并,php,multidimensional-array,associative-array,Php,Multidimensional Array,Associative Array,我有一个数组,看起来像这样 $array=Array ( [0] => Array ( [Country] => United Arab Emirates [users] => 2 ) [1] => Array ( [Country] => Albania [users] => 1 ) [2] => Array ( [Country] => Armenia [users] => 4 ) [3
$array=Array ( [0] => Array ( [Country] => United Arab Emirates [users] => 2 )
[1] => Array ( [Country] => Albania [users] => 1 )
[2] => Array ( [Country] => Armenia [users] => 4 )
[3] => Array ( [Country] => Argentina [users] => 12 )
[4] => Array ( [Country] => United Arab Emirates [users] => 3 )
[5] => Array ( [Country] => Austria [users] => 1 )
[6] => Array ( [Country] => Austria [users] => 8 )
[7] => Array ( [Country] => Austria [users] => 1 ) )
如果第一个值相同,我想添加第二个值。
我尝试了array_unique($array),但如果第一个值相同,则无法添加第二个值
所以我期望的结果是
Array ( [0] => Array ( [Country] => United Arab Emirates [users] => 5 )
[1] => Array ( [Country] => Albania [users] => 1 )
[2] => Array ( [Country] => Armenia [users] => 4 )
[3] => Array ( [Country] => Argentina [users] => 12 )
[4] => Array ( [Country] => Austria [users] => 10 ))
我尝试了以下方法,但无法解决
$array=array_unique($array)
and
foreach ($array as $unique){
if( in_array( $unique['Country'] ,$array) )
{
print_r ($unique['Country']);
}
}
你能帮我吗?你可以使用PHP函数
in_array()
试试这个
$array=array();
foreach($array as $k=>$v){
foreach($v as $key=>$value){
if(!in_array($value, $array)){
$array[]=$value;
}
}
}
您可以使用,例如:
$sum=array\u reduce($data,function($a,$b){
iSet($a[$b['Country']]?$a[$b['Country']]['users']+=$b['users']:$a[$b['Country']]=$b;
返回$a;
});
回声“;打印(数组值($sum));
您只需迭代第一个数组,然后自己总结它们:
$result = array();
foreach( $array as $value ){
if( !isset( $result[ $value[ "Country" ] ] ) ) $result[ $value[ "Country" ] ] = $value;
else $result[ $value[ "Country" ] ][ "users" ] += $value[ "users" ];
}
$result = array_values($result);
演示:您可以为此执行经典的foreach
循环:
Array
(
[0] => Array
(
[Country] => United Arab Emirates
[users] => 5
)
[1] => Array
(
[Country] => Albania
[users] => 1
)
[2] => Array
(
[Country] => Armenia
[users] => 4
)
[3] => Array
(
[Country] => Argentina
[users] => 12
)
[4] => Array
(
[Country] => Austria
[users] => 10
)
)
这将导致:
$country_users = array();
foreach ($array as $each) {
$value = $each['users'];
if (array_key_exists($each['Country'], $country_users)) {
$prev_users = $country_users[$each['Country']];
$value = $each['users'] + $prev_users;
}
$country_users[$each['Country']] = $value;
}
unset($array);
foreach ($country_users as $country=>$users) {
$array[] = array('Country' => $country, 'users' => $users);
}
echo '<pre>';
print_r($array);
试试这个。我希望这将帮助您:
$request = array();
foreach ($yourArray as $key => $value) {
if (!in_array($value['country'], $request)) {
$request[] = $value['country'];
}
else {
unset($yourArray[$key]);
}
}
print_r($yourArray);
$country_users=array();
foreach($array作为$each){
$value=$each['users'];
如果(数组键存在($each['Country',$Country\u users)){
$prev_users=$country_users[$each['country']];
$value=$each['users]+$prev_用户;
}
$country_用户[$each['country']]=$value;
}
未设置($数组);
foreach($country\u用户为$country=>$users){
$array[]=array('Country'=>$Country,'users'=>$users);
}
回声';
打印(数组);
您将通过以下代码获得结果:
array_unique($associativeArray,SORT_REGULAR);
您可以简单地在数组()中使用
array\u merge\u recursive()
,array\u unique()
,。正如你在上面看到的建议。但我的建议是改变数组结构(如果可能的话),让国家名称作为键,计数作为值的关联数组。操作和理解将更加简单和清晰
$associativeArray[] = array("name" => "pankaj Singh","no"=>4);
$associativeArray[] = array("name" => "pankaj Singh","no"=>24);
稍后您可以根据需要更改数组结构以进行响应。但我相信,使用关键价值结构可以帮助您避免很多麻烦
您可以使用此方法使其唯一
使用名称和年龄键定义关联数组$associateArray
$array = [
'Austria' => 12,
];
array_unique($associativeArray,SORT_REGULAR);
$associativeArray[] = array("name" => "pankaj Singh","no"=>4);
$associativeArray[] = array("name" => "pankaj Singh","no"=>24);