【问题标题】:Sorting a multidimensional array when the numbers are strings in PHP当数字是PHP中的字符串时对多维数组进行排序
【发布时间】:2018-01-26 15:12:40
【问题描述】:

我正在 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

如果有人想知道,我正在使用 php 7。

【问题讨论】:

  • 向我们展示您迄今为止所做的尝试。
  • 尝试usort($ar, function($a, $b) { return $a['status'] <=> $b['status'];}),然后输出$array [EDITED]
  • @HH 以某种方式成功了。多谢!我以前试过那个,但它不起作用。

标签: php arrays sorting multidimensional-array zend-framework


【解决方案1】:

试试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'];})

【讨论】:

    【解决方案2】:

    尝试将 uasort 函数与 spaceshift 运算符一起使用:

    $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
            )
    
    )
    

    【讨论】:

      猜你喜欢
      • 2018-07-17
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多