我正在努力尝试通过正常的功能对数组进行排序,我确定这需要一个自定义比较功能,但是除此之外还要把它放在那里。
我有一个包含5个元素的数组。我希望数组能够这样排序,arsort接近但不完全:
4,0,1,2,3
只是为了澄清,数组的位置如:$ array [0];
之前我还没有真正关注过数组比较函数,所以推动正确的方向最有助于解决这个问题!
谢谢,
亚当
答案 0 :(得分:11)
此方法将使用uksort
$desiredIndexOrder = array(4 => 1, 0 => 2, 1 => 3, 2 => 4, 3 => 5);
uksort($inputArray, function($a, $b) use ($desiredIndexOrder) {
return $desiredIndexOrder[$a] > $desiredIndexOrder[$b] ? -1 : 1;
});
请注意$desiredIndexOrder
数组采用index => desired sort position
格式。如果您不想将数组放在该格式中,可以使用以下方法为其构建:
$desiredIndexOrder = array();
foreach ($desiredKeyOrder as $position=>$key) {
$desiredIndexOrder[$key] = $position + 1;
}
$desiredKeyOrder
是密钥的数组顺序:array(4, 0, 1, 2, 3)
答案 1 :(得分:0)
试试这个
$array = array('t','r','a','c','k');
$keys = '4,0,1,2,3';
$keyArr = explode(',', $keys);
$sarr = array();
foreach ($keyArr as $key)
{
$sarr[$key] = $array[$key];
}
print_r($sarr);
答案 2 :(得分:0)
试试这个:
$numbers = array(1,2,3,4,5);
array_unshift($numbers, array_pop($numbers));
echo "<pre>";
print_r($numbers);
输出:
Array
(
[0] => 5
[1] => 1
[2] => 2
[3] => 3
[4] => 4
)