0
我遇到了这个问题,我需要在删除某个项目后对数组中的自然顺序值进行归一化/排序。以自然顺序对数组值进行归一化PHP
考虑下面的例子。初始阵列
{ [313]=> int(2) [303]=> int(1) [295]=> int(3) [290]=> int(4) }
有序数组
{ [303]=> int(1) [313]=> int(2) [295]=> int(3) [290]=> int(4) }
当我们卸下第一项考虑的情况下,阵列应该是现在这个样子
{ [313]=> int(1) [295]=> int(2) [290]=> int(3) }
在项目的情况下,阵列范围,例如内295
(3)应该是
{ [303]=> int(1) [313]=> int(2) [290]=> int(3) }
我希望你有个想法。 但我的功能不正确做到这一点。 我已经实现了这个排序的一部分,这里是代码,但也许有其他方法可以更容易地做到这一点?
const MIN_VALUE = 1;
public function sort_items(&$items_map)
{
if (!empty($items_map)) {
asort($items_map);
var_dump($items_map);
$first_item = reset($items_map);
if ($first_item > self::MIN_VALUE) {
$normalize_delta = $first_item - self::MIN_VALUE;
$prev_item_id = null;
foreach ($items_map as $id => $part) {
$items_map[$id] = $part - $normalize_delta;
if (!empty($prev_item_id)) {
$difference = $items_map[$id] - $items_map[$prev_item_id];
if ($difference > 1) {
$items_map[$id] = $items_map[$id] - ($difference - 1);
}
}
$prev_item_id = $id;
}
}
}
return $items_map;
}
我将不胜感激任何帮助。
感谢
UPDATE
澄清。
我想要的物品不被刚刚整理以正确的顺序,但要以自然顺序,例如
序列1,3,5,6,7,9
应转变为1,2,3,4,5,6
但保持keys
相同。
2,3,7,9
=>1,2,3,4
请看看我上面的例子与现实世界的情况。
谢谢你的回答,但你的代码不只是排序,我需要的项目是在自然秩序,请看到我的编辑。 – Putinhello