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; }
});
试试这个变体
我有如下两个数组:
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; }
});
试试这个变体