[英]PHP array merge elements with same key
这不是以下问题的重复:
我需要合并 PHP 数组中的项目,下面是我需要合并具有相同 UID 的项目的示例:
0 =>
array (size=10)
'id' => '958'
'uid' => '385'
'text' => '2021-10-23 08:32:35'
1 =>
array (size=10)
'id' => '956'
'uid' => '385'
'text' => '2021-10-23 08:31:51'
2 =>
array (size=10)
'id' => '957'
'uid' => '386'
'timestamp' => '2021-10-23 08:32:12'
3 =>
array (size=10)
'id' => '955'
'uid' => '385'
'timestamp' => '2021-10-23 08:31:38'
元素 0、1 和 3 具有相同的 UID,因此合并具有相同 UID 的元素后的预期数组为:
0 =>
array (size=10)
'id' => '958'
'uid' => '385'
'text' => '2021-10-23 08:32:35'
1 =>
array (size=10)
'id' => '957'
'uid' => '386'
'timestamp' => '2021-10-23 08:32:12'
我需要用最小的键保留项目。
我想,在 uid 重复的情况下,您希望保留数组中的第一个。
此解决方案可能适合您
$no_uid_duplicates = array();
foreach( $array as $key => $item ){
if(isset($no_uid_duplicates[$item["uid"]])){
array_splice($array, $key, 1);
}
$no_uid_duplicates[$item["uid"]] = 1;
}
有许多不同的方法可以做到这一点。 这只是一个。
$input[]=array('id'=>'958','uid'=>'385','text'=>'2021-10-23 08:32:35');
$input[]=array('id'=>'956','uid'=>'385','text'=>'2021-10-23 08:31:51');
$input[]=array('id'=>'957','uid'=>'386','timestamp'=>'2021-10-23 08:32:12');
$input[]=array('id'=>'955','uid'=>'385','timestamp'=>'2021-10-23 08:31:38');
$result;
foreach($input as $k=>$v){
if (! isset($result[$v['uid']])){
$result[$v['uid']] = $v;
}
}
// if you do not care about the key
echo '<pre>';
var_dump($result);
// if you want the keys reset
$result = array_values($result);
var_dump($result);
结果,首先是uid
成为数组键。
array(2) {
[385]=>
array(3) {
["id"]=> string(3) "958"
["uid"]=> string(3) "385"
["text"]=> string(19) "2021-10-23 08:32:35"
}
[386]=>
array(3) {
["id"]=> string(3) "957"
["uid"]=> string(3) "386"
["timestamp"]=> string(19) "2021-10-23 08:32:12"
}
}
并用阵列键重新设置。
array(2) {
[0]=>
array(3) {
["id"]=> string(3) "958"
["uid"]=> string(3) "385"
["text"]=> string(19) "2021-10-23 08:32:35"
}
[1]=>
array(3) {
["id"]=> string(3) "957"
["uid"]=> string(3) "386"
["timestamp"]=> string(19) "2021-10-23 08:32:12"
}
}
如前所述,有很多解决方案可以解决这个问题。
我认为函数array_reduce适合这种情况。
以下是您可以简单地使用它的方法(假设您的数组在此处命名为“$arr”):
// 1. Sort your array in desc order
krsort($arr);
// 2. Reduce your array
$reducedArr = array_reduce($arr, function($reducedArr, $arrValues) {
$reducedArr[$arrValues['uid']] = $arrValues; // Here we put your 'uid' as a key
return $reducedArr;
});
// 3. Check your reduced array
print_r($reducedArr);
希望这有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.