PHP有条件地重新排列数组的值

时间:2017-09-01 13:41:53

标签: php arrays function sorting conditional

我有两个数组如下:

Array
(
    [27119] => Array
        (
            [firstname] => Array
                (
                    [0] => Testfname1
                )

            [lastname] => Array
                (
                    [0] => Testlname1
                )

            [photograph] => Array
                (
                    [0] => 27120
                )

            [priority] => Array
                (
                    [0] => Open
                )

            [primary_location] => Array
                (
                    [0] => 27098
                )

        )

    [27137] => Array
        (
            [firstname] => Array
                (
                    [0] => Testfname2
                )

            [lastname] => Array
                (
                    [0] => Testlname2
                )

            [photograph] => Array
                (
                    [0] => 27138
                )

            [priority] => Array
                (
                    [0] => Featured
                )

            [primary_location] => Array
                (
                    [0] => 27098
                )

        )

)

现在我想基于priority键的值对数组进行排序,如果它的值是Featured那么整个元素(包含该对的数组) )应该在之前发生(如果没有其他候选人具有&= 39; priority =>特色')包含' priority =>的元素。开放'在数组中。如果它的值为Open,那么它的父数组应该在包含' priority =>的父元素之前。闭合'

总而言之,我想通过" priotity"对给定的多维数组进行排序。价值和条件。

我想过使用usort,但我无法初步了解如何在那些array_sort函数中设置它。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

让我们假设父数组的名称为testArray。然后使用PHP函数usort定义比较器回调函数应该如下所示:

$sortedArray = usort($testArray, function($left, $right) {
    if($left['priority'][0] == $right['priority'][0]) { return 0; }

    if($left['priority'][0] == 'Featured' || ($left['priority'][0] == 'Opened' && $right['priority'][0] == 'Closed')) { return -1; }
    else { return 1; }
});

尝试此变体