繁体   English   中英

基于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM