订购一个数组项而不破坏其键顺序

时间:2014-08-20 07:48:47

标签: php arrays sorting

我已经看到了很多关于这个主题的问题,但我无法解决我的问题。

我从数据库中获取包含菜单ID项的数组,有时可以更新这些项。

我从db收到的ID数组是:

array(3) {
  [0]=>
  int(1)
  [1]=>
  int(6)
  [2]=>
  int(2)
}

我需要id 2(int)移动到关键位置0($ sortindex)而不破坏数组项顺序。所以渴望的结果是:

array(3) {
  [0]=>
  int(2)
  [1]=>
  int(1)
  [2]=>
  int(6)
}

为此,我试图使用usort但没有成功:

usort($data, function($a, $b) use ($sortindex){

    if ($a == $b) {
        return 0;
    }

    if ($a == $sortindex) {
        return 1;
    }

});

这可能发生在任何其他商品ID上。例如,我可以从0键位置将id 1命令为2,结果将是:

array(3) {
  [0]=>
  int(6)
  [1]=>
  int(2)
  [2]=>
  int(1)
}

2 个答案:

答案 0 :(得分:3)

$array = [1, 6, 2];
array_unshift($array, array_pop($array));

或者可能:

$array = [1, 6, 2];
$tmp = array_splice($array, 2, 1);
array_unshift($array, $tmp[0]);

你并不是真的在寻找对值进行排序,你只想交换索引 如果要将值插入到数组前面以外的某个位置,请使用array_splice将其拼接回来。

如果您需要更换更多密钥,那么排序可能会成为最简单的解决方案:

uksort($array, function ($a, $b) {
    static $keyOrder = [2 => 0, 0 => 1, 1 => 2];
    return $keyOrder[$b] - $keyOrder[$a];
});

答案 1 :(得分:0)

也许您正在寻找asort功能