我已经看到很多关于这个话题的问题,但我无法解决我的问题。
我正在从数据库中获取一个带有菜单 ID 项的数组,这些项有时可以更新。
我从数据库收到的 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 上。例如,我可以将 id 1 从 0 键位置排序到 2,结果将是:
array(3) {
[0]=>
int(6)
[1]=>
int(2)
[2]=>
int(1)
}
$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];
});
也许你正在寻找排序函数