当数字是 PHP 中的字符串时对多维数组进行排序
Sorting a multidimensional array when the numbers are strings in PHP
我正在 Zend Framework 中创建票证系统,我需要按状态对票证进行排序,唯一的问题是状态是一个字符串。
这是我数组中的一个条目的样子:
`[1] => array(14) {
["ticket_id"] => string(3) "147"
["created_at"] => string(19) "2017-02-23 14:21:55"
["updated_at"] => string(19) "0000-00-00 00:00:00"
["deadline"] => string(19) "0000-00-00 00:00:00"
["scheduled_for"] => string(19) "0000-00-00 00:00:00"
["priority"] => string(1) "1"
["tracker"] => string(1) "1"
["status"] => string(1) "3"
["author"] => string(1) "12"
["assigned_group"] => string(0) ""
["uploadedFiles"] => string(0) ""
["uploadedFileName"] => string(0) ""
["title"] => string(19) "Sample problem"
}`
有谁知道如何按状态对其进行排序,状态可以是 1 到 5 之间的数字
编辑:到目前为止我已经尝试了这些解决方案
function natorder($a,$b) {
return strnatcmp ( $a['status'], $b['status'] );
}
uasort ($array, 'natorder');
来自:http://board.phpbuilder.com/showthread.php?10244548-natsort()-on-a-multidimensional-array
usort($myArray, function($a, $b) {
return $a['order'] - $b['order'];
});
来自:Sort Multi-dimensional Array by Value
如果有人想知道,我正在使用 php7。
尝试将 uasort 函数与飞船运算符一起使用:
$arr = [
['status' => '3'],
['status' => '2'],
['status' => '2'],
['status' => '1']
];
uasort($arr, function($a, $b) {
return $a['status'] <=> $b['status'];
});
print_r($arr);
结果(sandbox):
Array
(
[3] => Array
(
[status] => 1
)
[2] => Array
(
[status] => 2
)
[1] => Array
(
[status] => 2
)
[0] => Array
(
[status] => 3
)
)
尝试usort($array, function($a, $b) { return $a['status'] <=> $b['status'];})
测试使用:
[
[
"name" => "a",
"status" => "2",
],
[
"name" => "b",
"status" => "4",
],
[
"name" => "c",
"status" => "1",
],
[
"name" => "d",
"status" => "3",
],
]
输出
[
[
"name" => "c",
"status" => "1",
],
[
"name" => "a",
"status" => "2",
],
[
"name" => "d",
"status" => "3",
],
[
"name" => "b",
"status" => "4",
],
]
在你 运行 之后
usort($array, function($a, $b) { return $a['status'] <=> $b['status'];})
我正在 Zend Framework 中创建票证系统,我需要按状态对票证进行排序,唯一的问题是状态是一个字符串。
这是我数组中的一个条目的样子:
`[1] => array(14) {
["ticket_id"] => string(3) "147"
["created_at"] => string(19) "2017-02-23 14:21:55"
["updated_at"] => string(19) "0000-00-00 00:00:00"
["deadline"] => string(19) "0000-00-00 00:00:00"
["scheduled_for"] => string(19) "0000-00-00 00:00:00"
["priority"] => string(1) "1"
["tracker"] => string(1) "1"
["status"] => string(1) "3"
["author"] => string(1) "12"
["assigned_group"] => string(0) ""
["uploadedFiles"] => string(0) ""
["uploadedFileName"] => string(0) ""
["title"] => string(19) "Sample problem"
}`
有谁知道如何按状态对其进行排序,状态可以是 1 到 5 之间的数字
编辑:到目前为止我已经尝试了这些解决方案
function natorder($a,$b) {
return strnatcmp ( $a['status'], $b['status'] );
}
uasort ($array, 'natorder');
来自:http://board.phpbuilder.com/showthread.php?10244548-natsort()-on-a-multidimensional-array
usort($myArray, function($a, $b) {
return $a['order'] - $b['order'];
});
来自:Sort Multi-dimensional Array by Value
如果有人想知道,我正在使用 php7。
尝试将 uasort 函数与飞船运算符一起使用:
$arr = [
['status' => '3'],
['status' => '2'],
['status' => '2'],
['status' => '1']
];
uasort($arr, function($a, $b) {
return $a['status'] <=> $b['status'];
});
print_r($arr);
结果(sandbox):
Array
(
[3] => Array
(
[status] => 1
)
[2] => Array
(
[status] => 2
)
[1] => Array
(
[status] => 2
)
[0] => Array
(
[status] => 3
)
)
尝试usort($array, function($a, $b) { return $a['status'] <=> $b['status'];})
测试使用:
[
[
"name" => "a",
"status" => "2",
],
[
"name" => "b",
"status" => "4",
],
[
"name" => "c",
"status" => "1",
],
[
"name" => "d",
"status" => "3",
],
]
输出
[
[
"name" => "c",
"status" => "1",
],
[
"name" => "a",
"status" => "2",
],
[
"name" => "d",
"status" => "3",
],
[
"name" => "b",
"status" => "4",
],
]
在你 运行 之后
usort($array, function($a, $b) { return $a['status'] <=> $b['status'];})