首页 > 解决方案 > 如何在 PHP 中移动具有已知数组键权重的数组元素?

问题描述

让大脑因为一个相当微不足道的问题而冻结。如果我从这样的数组开始:

$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
    ],
);

最有效的方法是什么?

标签: phparrayssorting

解决方案


如果它可以帮助某些人,这是功能

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;
      }
}

我的解决方案的来源


推荐阅读