【问题标题】:natsort multidemsional arraynatsort 多任务数组
【发布时间】:2011-04-11 14:19:07
【问题描述】:

我有一个这样的多维数组:

array ([0] => array ([id] => 1 [name] => john doe [title] => Mr [days] => 10) 
[1] => array ([id] => 2 [name] => Joe Smith [title] => Dr [days] => 22) 
[2] => array ([id] => 3 [name] => John Jones [title] => Mr [days] => 3))

我需要对内部数组进行排序,以便按天键按自然顺序返回数据。

IE 像这样:

array ([2] => array ([id] => 3 [name] => John Jones [title] => Mr [days] => 3)
[0] => array ([id] => 1 [name] => john doe [title] => Mr [days] => 10) 
[1] => array ([id] => 2 [name] => Joe Smith [title] => Dr [days] => 22))

我认为我需要的是一个通过 $key 将 natsort 应用于多维数组的函数,但到目前为止,我还没有找到任何除了标准排序之外的函数。

有什么帮助吗?

【问题讨论】:

  • usort 解决方案对我有用。我尝试了这两种方法,但都没有成功。然后我详细检查了我正在创建的数组,并发现有一些意想不到的功能。熨烫这些 usort 立即奏效。这节课的士气是确保你正在使用你认为存在的东西。
  • “显而易见的事实让你忽略了证据”--Sara Sidle

标签: php multidimensional-array natsort


【解决方案1】:

以下对我有用,

usort($array, function($a, $b) {
    return strnatcasecmp($a['days'], $b['days']);
});

从这里找到:- https://learntech.imsu.ox.ac.uk/blog/php-naturally-sorting-multidimension-arrays-by-string-values/

希望有人会觉得这很有用。

【讨论】:

    【解决方案2】:

    你想要的是usort

    你可以写一个回调来为你做比较:

    usort($data, function($a, $b) {
        return ($a['days'] > $b['days'])
               ? 1 
               : ($a['days'] < $b['days'])
                 ? -1 
                 : 0;
    });
    

    免责声明:您需要 PHP 5.3.x 才能工作,否则您必须求助于create_function 或预定义比较函数。

    【讨论】:

      【解决方案3】:

      有点不同的方法:

      $days = array();
      foreach($array as $key => $val) {
          $days[$key] = $val['days'];
      }
      array_multisort($days, $array); //$array being your input array
      

      结果:

      Array
      (
          [0] => Array
              (
                  [id] => 3
                  [name] => Jay Doe
                  [title] => Mr
                  [days] => 3
              )
      
          [1] => Array
              (
                  [id] => 1
                  [name] => John Doe
                  [title] => Mr
                  [days] => 10
              )
      
          [2] => Array
              (
                  [id] => 2
                  [name] => Joe Doe
                  [title] => Mr
                  [days] => 22
              )
      
      )
      

      【讨论】:

      • 你能解释一下 $array 吗?那是需要排序的数组吗? (看过)
      • 是的。您在上面的问题中遇到的那个。只需将其分配给 $array 或与此相关的任何变量,只需确保进行必要的更改即可。
      猜你喜欢
      • 2019-02-07
      • 1970-01-01
      • 2019-03-20
      • 2017-05-11
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 1970-01-01
      相关资源
      最近更新 更多