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)
我想用任何已经存在的排序函数得到这些期望的结果.
谢谢.
循环$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)
或者你可以使用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)