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

Acc*_*ent 4 php arrays sorting

我有一个像下面这样的结构的数组

$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'),
);
Run Code Online (Sandbox Code Playgroud)

和另一个数组结构 $array2 = array(567,345,789,123);

现在我想用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'),
);
Run Code Online (Sandbox Code Playgroud)

我想用任何已经存在的排序函数得到这些期望的结果.

谢谢.

tax*_*ala 7

循环$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];
}
Run Code Online (Sandbox Code Playgroud)

如果你想要一个功能:

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

$myOrderedArray = orderArray($array1, $array2);
Run Code Online (Sandbox Code Playgroud)


Nar*_*dia 6

或者你可以使用uksortphp 的函数作为

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

小提琴