如何在PHP中移动具有已知数组键权重的数组元素?
因为一个相当琐碎的问题而头脑僵硬。如果我从这样的数组开始:如何在PHP中移动具有已知数组键权重的数组元素?,php,arrays,sorting,Php,Arrays,Sorting,因为一个相当琐碎的问题而头脑僵硬。如果我从这样的数组开始: $my_array = array( 1 => [ "id" => 1, "weight" => 0 ], 2 => [ "id" => 2, "weight" => -1 ], 3 => [ "id" => 3, "weight" => 0
$my_array = array(
1 => [
"id" => 1,
"weight" => 0
],
2 => [
"id" => 2,
"weight" => -1
],
3 => [
"id" => 3,
"weight" => 0
],
4 => [
"id" => 4,
"weight" => -1
],
);
$my_array = array(
1 => [
"id" => 2,
"weight" => -1
],
2 => [
"id" => 1,
"weight" => 0
],
3 => [
"id" => 4,
"weight" => -1
],
4 => [
"id" => 3,
"weight" => 0
],
);
我将执行一个函数,将数组中的键移动到key+“weight”。所以结果可能是这样的:
$my_array = array(
1 => [
"id" => 1,
"weight" => 0
],
2 => [
"id" => 2,
"weight" => -1
],
3 => [
"id" => 3,
"weight" => 0
],
4 => [
"id" => 4,
"weight" => -1
],
);
$my_array = array(
1 => [
"id" => 2,
"weight" => -1
],
2 => [
"id" => 1,
"weight" => 0
],
3 => [
"id" => 4,
"weight" => -1
],
4 => [
"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);
}
$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;
}
}
函数重新排序_数组(&$my_数组){
foreach($key=>$object的my_数组){
$move=$object['weight'];
$arr=$my_数组;
如果($move==0 | |!isset($arr[$key])){
继续;
}
$i=0;
外汇($arr as和$val){
$val=array('sort'=>(++$i*10),'val'=>$val);
}
$arr[$key]['sort']=$arr[$key]['sort']+($move*10+($key==$key?($move<0?-5:5):0));
uasort($arr,函数($a,$b){
返回$a['sort']>$b['sort'];
});
外汇($arr as和$val){
$val=$val['val'];
}
$my_数组=$arr;
}
}
钥匙是否需要更换?还是说这是合理的?我看到您将
重量
更改为位置
介于两者之间。因此,array\u map
和usort
的组合应该可以做到这一点。是的,很抱歉我忘记了一些编辑,我做了一个更好的示例,我只能在更简单的情况下更改顺序,感谢这些函数,我将看看我能做些什么。请开始使用简短的数组语法[]
。没有必要改用array()