PHP 按数组列表优先级对多维数组进行排序



我有包含动物数据的数组$data。我想按子元素对这个数组进行排序:

source array ($data):
    Array (
     [0] => (
      'name' => 'Leo'
      'type' => 'cat'
     )
     [1] => (
      'name' => 'Max'
      'type' => 'dog'
     )
     [2] => (
      'name' => 'Elsa'
      'type' => 'fish'
     )
     ...
    )
priority array ($priority)
$priority = [
            'fish', 'dog', 'cat',
        ];

我想使用优先级数组对源数组进行排序。我试过了:

sort($data, function (int $item1, int $item2) use($priority) {
            foreach($priority as $key => $value) {
                if($item1 == $value)
                {
                    return 0;
                    break;
                }
                if($item2 == $value)
                {
                    return 1;
                    break;
                }
            }
            return 0;
        });

您可以将 usort 与自定义比较函数一起使用,如下所示:

<?php
$arr = array(
    0 => array(
      'name' => 'Leo',
      'type' => 'cat'
    ),
    1 => array(
      'name' => 'Max',
      'type' => 'dog'
    ),
    2 => array(
      'name' => 'Elsa',
      'type' => 'fish'
    )
);
$priority = array('fish', 'dog', 'cat');
usort($arr, function($a, $b) use($priority) { 
    return array_search($a['type'], $priority) <=> array_search($b['type'], $priority);
});
var_dump($arr);

工作原理:uSort接受自定义比较函数,你可以给它传递优先级数组,然后使用宇宙飞船算子比较优先级中的值索引。

一试:http://sandbox.onlinephpfunctions.com/code/03fdfa61b1bd8b0b84e5f08ab11b6bc90eeaef4a

最新更新