Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有唯一值的PHP关联数组合并_Php_Multidimensional Array_Associative Array - Fatal编程技术网

具有唯一值的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);