3

我正在努力尝试通过普通函数对数组进行排序,我确定这需要一个自定义比较函数,但仍然会将其丢弃。

我有一个里面有 5 个元素的数组。我希望数组像这样对自身进行排序,arsort 接近但不完全:

4,0,1,2,3

澄清一下,数组的位置如下: $array[0];

我之前实际上没有看过数组比较函数,所以朝着正确的方向推进对解决这个问题最有帮助!

谢谢,

亚当

4

3 回答 3

14

此方法将使用预定义的键顺序对数组进行排序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)

于 2013-03-08T13:29:15.453 回答
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);
于 2013-03-08T13:23:47.923 回答
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
)
于 2013-03-08T13:26:44.297 回答