代码之家  ›  专栏  ›  技术社区  ›  senty

按具有相同索引[重复]的另一个键数组对[key=>value]数组进行排序

  •  0
  • senty  · 技术社区  · 6 年前

    我有一个索引数组,我想对另一个数组进行排序:

    $order = [7, 2, 1, 4];
    
    $array = [
       1 => "O",
       2 => "T"
       4 => "F"
       7 => "S"
    ]
    

    我怎样才能订这道菜 $array 基于 $order

    $array = [
       7 => "S",
       2 => "T"
       1 => "O",
       4 => "F"
    ]
    

    据我所知,除for循环之外的其他内容更受欢迎

    1 回复  |  直到 6 年前
        1
  •  2
  •   Jeto    4 年前

    你可以利用 uksort array_search :

    uksort($array, static function (int $key1, int $key2) use ($order): int {
        return array_search($key1, $order, true) <=> array_search($key2, $order, true);
    });
    

    $order 数组:

    • 是一种排序功能,允许基于数组键(此处为1、2、4和7)进行排序,
    • array_search($key1, $order, true) 给你 $key1 美元订单 ,
    • array_search($key2, $order, true) $key2 在内部的位置 美元订单 ,
    • <=> (称为 spaceship operator )比较这些值,以便排序将较低的值(也称为较低的位置)放入 美元订单 )首先。

    Demo

    注意:如果阵列很大,性能可能会很差,如 将在同一个键上运行多次。如果这是一个问题,你可以做的是抓住所有关键点的位置 美元订单 首先,然后根据它们进行排序。