php按预定义的顺序对数组进行排序
我很努力地尝试通过正常函数对数组进行排序,我确定这需要一个自定义的比较函数,但是没有人会在这里查找它。php按预定义的顺序对数组进行排序
我有一个数组里面有5个元素。我想数组本身像这样排序,arsort差一点但并不完全:
4,0,1,2,3
只是为了澄清,数组等的位置:$阵列[0 ]。
我之前并没有真正看过数组比较函数,所以向正确的方向推动对解决这个问题最有帮助!
感谢,
亚当
此方法将使用按键的一个预先定义的顺序使用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)
谢谢科林,这正是我之后的事情。同样使用比较功能完美地回答了我的问题。 – evensis 2013-03-08 13:42:31
@AdamHall很高兴帮助 – 2013-03-08 13:43:22
试试这个
$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);
认为在你的字符串周围加引号可能很重要吗?而且,这不起作用。 – 2013-03-08 13:24:40
感谢您指出。我已经更新了代码。 – 2013-03-08 13:32:34
试试这个:
$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
)
您可以使用[' usort()'](http://php.net/usort)通过自定义比较函数对数组进行排序。 – Carsten 2013-03-08 13:23:54