当数字是 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'];})