【问题标题】:php sorting an array by predefined order [duplicate]php按预定义的顺序对数组进行排序[重复]
【发布时间】:2013-03-08 13:20:49
【问题描述】:

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

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

4,0,1,2,3

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

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

谢谢,

亚当

【问题讨论】:

  • 您可以使用usort()通过自定义比较函数对数组进行排序。

标签: php arrays sorting


【解决方案1】:

此方法将使用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)

【讨论】:

  • 感谢 Colin,这正是我所追求的。还使用比较功能完美地回答了我的问题。
  • @AdamHall 很高兴为您提供帮助
【解决方案2】:

试试这个:

$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
)

【讨论】:

    【解决方案3】:

    试试这个

    $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);
    

    【讨论】:

    • 认为在字符串周围加上引号可能很重要?而且,这也行不通。
    • 感谢您指出这一点。我已经更新了代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    相关资源
    最近更新 更多