[英]How to sort an array based on the values of another (partial) array in PHP?
[英]Sort an array based on another array's values in PHP
我有一個數組的數組如下: -
$Array1 = array("myfirst_value", "mysecond_value", "mythird_value"}
現在對於我的另一個數組,該列表隨機出現如下: -
$Array2 = array
(
[4] => myfirst_value
[8] => myforth_value
[21] => mysecond_value
[7] => myfifth_value
[17] => mysixth_value
[20] => mythird_value
[16] => myseventh_value
)
我希望實現的是$ Array2根據$ Array1中的值的順序進行排序。
所以,我希望$ Array2得到排序並成為: -
$Array2 = array
(
[4] => myfirst_value
[21] => mysecond_value
[20] => mythird_value
[7] => myfifth_value
[8] => myforth_value
[16] => myseventh_value
[17] => mysixth_value
)
請注意,Array1的值先排序,其余的只是輸出而沒有任何順序。
謝謝
如果我理解正確的話
$Array1 = array("myfirst_value", "mysecond_value", "mythird_value");
$Array2 = array
(
4 => myfirst_value,
8 => myforth_value,
21 => mysecond_value,
7 => myfifth_value,
17 => mysixth_value,
20 => mythird_value,
16 => myseventh_value
);
// Remove elements of the 1st array from the 2nd
function f ($v) { global $Array1; return in_array($v, $Array1);}
$a1 = array_filter($Array2, 'f');
// Take the rest elements
$a2 = array_diff_key($Array2, $a1);
// Combine back
print_r($a1+$a2);
結果
Array
(
[4] => myfirst_value
[21] => mysecond_value
[20] => mythird_value
[8] => myforth_value
[7] => myfifth_value
[17] => mysixth_value
[16] => myseventh_value
)
您也可以使用uasort()
函數
uasort($Array2, function($a,$b) use (&$Array1){
foreach($Array1 as $key => $value){
if($a == $value){
return 0;
break;
}
if($b == $value){
return 1;
break;
}
}
if($a == $b){ return 0;} return ($a < $b) ? -1 : 1;
});
除了潑水的完美答案,這也有效: -
$Sorted_Array = array_merge(
array_intersect($Array1, $Array2),
array_diff($Array2, $Array1)
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.