根据另一个数组

时间:2017-02-10 19:06:51

标签: php arrays

我有这个选项数组,内部数组的某些值是“ID”

[options] => Array (
    [0] => Array (
        [id] => 1088
        [label] => John
    )
    [1] => Array (
        [id] => 1089
        [label] => Peter
    )
    [2] => Array (
        [id] => 1050
        [label] => Mary
    )
    ....

另一方面,我有这个数组:

$array_sort = array(1089, 1050, 1088, ...);

我希望第一个数组的options数组基于$array_sort进行排序(查看“id”)。

我知道如何以非常脏的方式(有很多循环和临时数组)这样做,但我想有一些smart_ *函数的智能解决方案来做到这一点。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用array_filter将选项限制为仅排序数组中的选项,然后usort根据$array_sort数组中使用array_search数组的位置对其进行排序:

$sorted = array_filter($options, function($arr) use($array_sort) {
    return in_array($arr['id'], $array_sort);
});
usort($sorted, function($a, $b) use($array_sort) {
    return array_search($a['id'], $array_sort) - array_search($b['id'], $array_sort);
});
// $sorted should now be the sorted array