2013-03-08 150 views
2

我很努力地尝试通过正常函数对数组进行排序,我确定这需要一个自定义的比较函数,但是没有人会在这里查找它。php按预定义的顺序对数组进行排序

我有一个数组里面有5个元素。我想数组本身像这样排序,arsort差一点但并不完全:

4,0,1,2,3

只是为了澄清,数组等的位置:$阵列[0 ]。

我之前并没有真正看过数组比较函数,所以向正确的方向推动对解决这个问题最有帮助!

感谢,

亚当

+0

您可以使用[' usort()'](http://php.net/usort)通过自定义比较函数对数组进行排序。 – Carsten 2013-03-08 13:23:54

回答

10

此方法将使用按键的一个预先定义的顺序使用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)

+0

谢谢科林,这正是我之后的事情。同样使用比较功能完美地回答了我的问题。 – evensis 2013-03-08 13:42:31

+0

@AdamHall很高兴帮助 – 2013-03-08 13:43:22

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); 
+1

认为在你的字符串周围加引号可能很重要吗?而且,这不起作用。 – 2013-03-08 13:24:40

+0

感谢您指出。我已经更新了代码。 – 2013-03-08 13:32:34

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 
) 
相关问题