我已经看到了很多关于这个主题的问题,但我无法解决我的问题。
我从数据库中获取包含菜单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)
}
答案 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功能