【问题标题】:How do I move an array element with a known key weight of an array in PHP?如何在 PHP 中移动具有已知数组键权重的数组元素?
【发布时间】:2020-03-15 00:23:01
【问题描述】:

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

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

最有效的方法是什么?

【问题讨论】:

  • 密钥需要更改吗?还是按顺序排列?我看到你在两者之间将weight 更改为position。所以array_mapusort 的组合应该可以解决问题。
  • 是的,对不起,我忘记了一些编辑,我有一个更好的例子,如果它更容易,我可以只更改顺序,感谢这些功能,我会看看我能用这个做什么
  • 请开始使用短数组语法[]。改用array() 没有意义

标签: php arrays sorting


【解决方案1】:

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

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

Source of my solution

【讨论】:

    猜你喜欢
    • 2011-01-22
    • 2010-12-29
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多