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

时间:2019-07-15 14:03:53

标签: php sorting

我有一个数组$ 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;
        });

1 个答案:

答案 0 :(得分:1)

您可以将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接受自定义比较功能,您可以将其传递给优先级数组,然后使用spaceship operator来比较优先级中的值索引。

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