大脑因一个相当琐碎的问题而陷入僵局。如果我从这样的数组开始:
$my_array = array(
1 => array(
"id" => 1,
"weight" => 0
),
2 => array(
"id" => 2,
"weight" => -1
),
3 => array(
"id" => 3,
"weight" => 0
),
4 => array(
"id" => 4,
"weight" => -1
),
);
并且我将执行将数组键移至键+'权重'的功能。因此结果应该是这样的:
$my_array = array(
1 => array(
"id" => 2,
"weight" => -1
),
2 => array(
"id" => 1,
"weight" => 0
),
3 => array(
"id" => 4,
"weight" => -1
),
4 => array(
"id" => 3,
"weight" => 0
),
);
最有效的方法是什么?
这里是可以帮助某些人的功能
function reorder_array(&$my_array) {
foreach ($my_array as $key => $object) {
$move = $object['weight'];
$arr = $my_array;
if ($move == 0 || !isset($arr[$key])) {
continue;
}
$i = 0;
foreach($arr as &$val){
$val = array('sort' => (++$i * 10), 'val' => $val);
}
if($move == 0 && $key == $key){
continue;
}elseif($move == 0) {
$tmp = $arr[$key]['sort'];
$arr[$key]['sort'] = $arr[$key]['sort'];
$arr[$key]['sort'] = $tmp;
}else{
$arr[$key]['sort'] = $arr[$key]['sort'] + ($move * 10 + ($key == $key ? ($move < 0 ? -5 : 5) : 0));
}
uasort($arr, function($a, $b) {
return $a['sort'] > $b['sort'];
});
foreach($arr as &$val) {
$val = $val['val'];
}
$my_array = $arr;
}
}