使用另一个数组和PHP对嵌套数组进行排序

时间:2020-11-02 14:57:29

标签: php arrays database sorting

我得到了这个数组,来自数据库。值的顺序可由用户更改

Array
 (
   [0] => 14
   [1] => 15
   [2] => 9
   [3] => 13
   [4] => 12
   ...
   [n] => n
 )

还有另一个数组,它将提取到浏览器中:

  Array
  (
   [0] => Array
    (
        [id] => 1
        ...
        [nr] => 9
        ...
    )
   [1] => Array
   (
        [id] => 2
        ...
        [nr] => 12
        ...
    )
    [2] => Array
   (
        [id] => 3
        ...
        [nr] => 15
        ...
    )
    [n] => Array
  )

我需要找到一种方法,用nr(不是id)来对第二个数组进行排序,并且nr的顺序来自第一个数组。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您可以翻转第一个数组以了解ID的顺序:

$order = array_flip($order);

然后,您只需使用usort即可根据之前的翻转数组对数组进行排序:

usort($array, static function(array $a, array $b) use ($order) {
    return $order[$a['nr']] <=> $order[$b['nr']];
});

答案 1 :(得分:1)

您可以将值映射到键,然后使用该映射重新排序。

<?php

$order = 
[
    2,
    5,
    1
];

$items =
[
    ['o' => 1],
    ['o' => 5],
    ['o' => 2],
];

foreach($items as $k => $v) {
    $map[$v['o']] = $k;
}

var_export($map);

foreach($order as $o) {
    $k = $map[$o];
    $result[$k] = $items[$k];
}

var_export($result);

输出:

array (
    1 => 0,
    5 => 1,
    2 => 2,
  )array (
    2 => 
    array (
      'o' => 2,
    ),
    1 => 
    array (
      'o' => 5,
    ),
    0 => 
    array (
      'o' => 1,
    ),
  )

假设存在一对一映射。

相关问题