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

PHP re-arrange values of the array, conditionally

我有如下两个数组:

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 那么整个元素(包含该对的数组)应该出现在(如果没有其他候选人具有 'priority => featured')数组中包含 'priority => open' 的元素之前。如果它的值为 Open 那么它的父数组应该在包含 'priority => closed'.

的父元素之前

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

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

假设父数组的名称为 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; }
});

试试这个变体