合并、删除重复项并对 php 中的关联数组进行排序
Merge, remove duplicates and sort associative array in php
我正在尝试合并 php 中的数组。一切都来自数据库,两个不同的结果可能如下所示:
array[0]['id_user'] = 1
array[0]['tokenId'] = 123
array[1]['id_user'] = 2
array[1]['tokenId'] = 456
array[2]['id_user'] = 5
array[2]['tokenId'] = 789
array[0]['id_user'] = 1
array[0]['tokenId'] = 123
array[1]['id_user'] = 2
array[1]['tokenId'] = 752
array[2]['id_user'] = 3
array[2]['tokenId'] = 789
使用 array_merge() 然后 array_unique() 应该会给我这样的结果,我期望:
unique_and_merged_array[0]['id_user'] = 1
unique_and_merged_array[0]['tokenId'] = 123
unique_and_merged_array[1]['id_user'] = 2
unique_and_merged_array[1]['tokenId'] = 456
unique_and_merged_array[2]['id_user'] = 5
unique_and_merged_array[2]['tokenId'] = 789
unique_and_merged_array[3]['id_user'] = 2
unique_and_merged_array[3]['tokenId'] = 752
unique_and_merged_array[4]['id_user'] = 3
unique_and_merged_array[4]['tokenId'] = 789
那我怎么按id_user值排序呢?我不确定是否理解不同的排序 php 函数 ...
基于 PHP 的解决方案可能如下所示:
//Define arrays for testing
$array1[0]['id_user'] = 1;
$array1[0]['tokenId'] = 123;
$array1[1]['id_user'] = 2;
$array1[1]['tokenId'] = 456;
$array1[2]['id_user'] = 5;
$array1[2]['tokenId'] = 789;
$array2[0]['id_user'] = 1;
$array2[0]['tokenId'] = 123;
$array2[1]['id_user'] = 2;
$array2[1]['tokenId'] = 752;
$array2[2]['id_user'] = 3;
$array2[2]['tokenId'] = 789;
//Define sort function - compares arrays using the 'id_user' value
function sortByUserId($array1, $array2)
{
if ($array1['id_user'] == $array2['id_user']) {
return 0;
}
return ($array1['id_user'] < $array2['id_user']) ? -1 : 1;
}
//Merge arrays
$unique_and_merged_array = array_merge($array1, $array2);
//Remove duplicate entries - note SORT_REGULAR in order to work with multidimensional arrays
$unique_and_merged_array = array_unique($unique_and_merged_array, SORT_REGULAR);
//Sort the arrays
uasort($unique_and_merged_array, 'sortByUserId');
//Enjoy ;)
var_dump($unique_and_merged_array);
您可以像
一样简单地使用 usort
usort($unique_and_merged_array,function($a,$b){
return $a['id_user'] - $b['id_user'];
});
print_r($result);
输出:
Array
(
[0] => Array
(
[id_user] => 1
[tokenId] => 123
)
[1] => Array
(
[id_user] => 2
[tokenId] => 752
)
[2] => Array
(
[id_user] => 2
[tokenId] => 456
)
[3] => Array
(
[id_user] => 3
[tokenId] => 789
)
[4] => Array
(
[id_user] => 5
[tokenId] => 789
)
)
function cmp($a,$b){
if ($a["id_user"] == $b["id_user"]) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$unique_and_merged_array = array();
$unique_and_merged_array[0]['id_user'] = 1;
$unique_and_merged_array[0]['tokenId'] = 123;
$unique_and_merged_array[1]['id_user'] = 2;
$unique_and_merged_array[1]['tokenId'] = 456;
$unique_and_merged_array[2]['id_user'] = 5;
$unique_and_merged_array[2]['tokenId'] = 789;
$unique_and_merged_array[3]['id_user'] = 2;
$unique_and_merged_array[3]['tokenId'] = 752;
$unique_and_merged_array[4]['id_user'] = 3;
$unique_and_merged_array[4]['tokenId'] = 789;
usort($unique_and_merged_array, "cmp");
我正在尝试合并 php 中的数组。一切都来自数据库,两个不同的结果可能如下所示:
array[0]['id_user'] = 1
array[0]['tokenId'] = 123
array[1]['id_user'] = 2
array[1]['tokenId'] = 456
array[2]['id_user'] = 5
array[2]['tokenId'] = 789
array[0]['id_user'] = 1
array[0]['tokenId'] = 123
array[1]['id_user'] = 2
array[1]['tokenId'] = 752
array[2]['id_user'] = 3
array[2]['tokenId'] = 789
使用 array_merge() 然后 array_unique() 应该会给我这样的结果,我期望:
unique_and_merged_array[0]['id_user'] = 1
unique_and_merged_array[0]['tokenId'] = 123
unique_and_merged_array[1]['id_user'] = 2
unique_and_merged_array[1]['tokenId'] = 456
unique_and_merged_array[2]['id_user'] = 5
unique_and_merged_array[2]['tokenId'] = 789
unique_and_merged_array[3]['id_user'] = 2
unique_and_merged_array[3]['tokenId'] = 752
unique_and_merged_array[4]['id_user'] = 3
unique_and_merged_array[4]['tokenId'] = 789
那我怎么按id_user值排序呢?我不确定是否理解不同的排序 php 函数 ...
基于 PHP 的解决方案可能如下所示:
//Define arrays for testing
$array1[0]['id_user'] = 1;
$array1[0]['tokenId'] = 123;
$array1[1]['id_user'] = 2;
$array1[1]['tokenId'] = 456;
$array1[2]['id_user'] = 5;
$array1[2]['tokenId'] = 789;
$array2[0]['id_user'] = 1;
$array2[0]['tokenId'] = 123;
$array2[1]['id_user'] = 2;
$array2[1]['tokenId'] = 752;
$array2[2]['id_user'] = 3;
$array2[2]['tokenId'] = 789;
//Define sort function - compares arrays using the 'id_user' value
function sortByUserId($array1, $array2)
{
if ($array1['id_user'] == $array2['id_user']) {
return 0;
}
return ($array1['id_user'] < $array2['id_user']) ? -1 : 1;
}
//Merge arrays
$unique_and_merged_array = array_merge($array1, $array2);
//Remove duplicate entries - note SORT_REGULAR in order to work with multidimensional arrays
$unique_and_merged_array = array_unique($unique_and_merged_array, SORT_REGULAR);
//Sort the arrays
uasort($unique_and_merged_array, 'sortByUserId');
//Enjoy ;)
var_dump($unique_and_merged_array);
您可以像
一样简单地使用usort
usort($unique_and_merged_array,function($a,$b){
return $a['id_user'] - $b['id_user'];
});
print_r($result);
输出:
Array
(
[0] => Array
(
[id_user] => 1
[tokenId] => 123
)
[1] => Array
(
[id_user] => 2
[tokenId] => 752
)
[2] => Array
(
[id_user] => 2
[tokenId] => 456
)
[3] => Array
(
[id_user] => 3
[tokenId] => 789
)
[4] => Array
(
[id_user] => 5
[tokenId] => 789
)
)
function cmp($a,$b){
if ($a["id_user"] == $b["id_user"]) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$unique_and_merged_array = array();
$unique_and_merged_array[0]['id_user'] = 1;
$unique_and_merged_array[0]['tokenId'] = 123;
$unique_and_merged_array[1]['id_user'] = 2;
$unique_and_merged_array[1]['tokenId'] = 456;
$unique_and_merged_array[2]['id_user'] = 5;
$unique_and_merged_array[2]['tokenId'] = 789;
$unique_and_merged_array[3]['id_user'] = 2;
$unique_and_merged_array[3]['tokenId'] = 752;
$unique_and_merged_array[4]['id_user'] = 3;
$unique_and_merged_array[4]['tokenId'] = 789;
usort($unique_and_merged_array, "cmp");