![](/img/trans.png)
[英]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.