[英]PHP associative array merge with unique values
我有一个看起来像这样的数组
$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']);
}
}
你能帮我吗?
您可以使用array_reduce ,例如:
$sum = array_reduce($data, function ($a, $b) {
isset($a[$b['Country']]) ? $a[$b['Country']]['users'] += $b['users'] : $a[$b['Country']] = $b;
return $a;
});
echo "<pre>"; print_r(array_values($sum));
您可以为此执行经典的foreach
循环:
$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);
这将导致:
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 = [
[ "Country" => "United Arab Emirates", "users" => 2 ],
[ "Country" => "Albania", "users" => 1 ],
[ "Country" => "Armenia", "users" => 4 ],
[ "Country" => "Argentina", "users" => 12 ],
[ "Country" => "United Arab Emirates", "users" => 3 ],
[ "Country" => "Austria", "users" => 1 ],
[ "Country" => "Austria", "users" => 8 ],
[ "Country" => "Austria", "users" => 1 ],
];
$new = [];
foreach ($array as $item) {
// Check if we already have added the country to the new array
if (empty($new[$item['Country']])) {
// The country doesn't exist, add it
$new[$item['Country']] = ['Country' => $item['Country'], 'users' => 0];
}
// Add the amount of users
$new[$item['Country']]['users'] += $item['users'];
}
// Since we used the country as key, we can use array_values()
// to get it as an array with numeric indexes again.
$new = array_values($new);
演示: https : //3v4l.org/ZuUoL
您可以使用此方法制作独特的
array_unique($associativeArray,SORT_REGULAR);
使用名称和年龄键定义关联数组$associativeArray 。
$associativeArray[] = array("name" => "pankaj Singh","no"=>4);
$associativeArray[] = array("name" => "pankaj Singh","no"=>24);
您可以使用 PHP 函数
in_array()
试试这个
$array=array();
foreach($array as $k=>$v){
foreach($v as $key=>$value){
if(!in_array($value, $array)){
$array[]=$value;
}
}
}
试试这个。 我希望这会帮助你:
$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);
您可以简单地使用array_merge_recursive()
、 array_unique()
、 in_array()
函数。 正如你在上面看到的建议。 但我的建议是更改数组结构(如果可能),将关联数组与国家名称作为键并作为值计数。 操作和理解会更简单明了。
$array = [
'Austria' => 12,
];
您可以稍后根据需要更改数组结构以进行响应。 但我相信,使用键值结构操作可以帮助您避免很多麻烦。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.