简体   繁体   English

使用PHP中的自定义键对数组进行排序

[英]Sorting the array with Custom Key in PHP

I have an array of one structure like below 我有一个像下面这样的结构的数组

$array1 = array(
[123] => array('1'=>'1','2'=>'3'),
[345] => array('1'=>'3','2'=>'5'),
[789] => array('1'=>'1','2'=>'5'),
[567] => array('1'=>'6','2'=>'5'),
);

and another array structure as $array2 = array(567,345,789,123); $array2 = array(567,345,789,123);

Now i want to sort this one with php sort function, i mean sort the first array with second one to looks like the desired output something like below 现在我想用php排序函数对这个排序,我的意思是用第二个排序第一个数组看起来像所需的输出,如下所示

$array1 = array(
[567] => array('1'=>'6','2'=>'5'),
[345] => array('1'=>'3','2'=>'5'),
[789] => array('1'=>'1','2'=>'5'),
[123] => array('1'=>'1','2'=>'3'),
);

I want to get these desired result with any sorting function which is already exists. 我想用任何已经存在的排序函数得到这些期望的结果。

Thanks. 谢谢。

Loop your $array2 and populate a third array as follows: 循环你的$array2并填充第三个数组,如下所示:

$array1 = array(
    [123] => array('1'=>'1','2'=>'3'),
    [345] => array('1'=>'3','2'=>'5'),
    [789] => array('1'=>'1','2'=>'5'),
    [567] => array('1'=>'6','2'=>'5'),
);

$array2 = array(567,345,789,123);

$orderedArray = array();
foreach ($array2 as $key) {
    $orderedArray[$key] = $array1[$key];
}

And if you want a function: 如果你想要一个功能:

function orderArray($arrayToOrder, $keys) {
    $ordered = array();
    foreach ($keys as $key) {
        if (isset($arrayToOrder[$key])) {
             $ordered[$key] = $arrayToOrder[$key];
        }
    }
    return $ordered;
}

$myOrderedArray = orderArray($array1, $array2);

Or you can use uksort function of php as 或者你可以使用php的uksort功能

uksort($array1, function($a, $b)use($array2) {
    foreach($array2 as $value){
        if($a == $value){
            return 0;
            break;
        }
        if($b == $value){
            return 1;
            break;
        }
    }
});

Fiddle 小提琴

这个怎么样?

$sortedArray = array_replace(array_flip($array2), $array1); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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