【问题标题】:How to sort this type of complex 3d array in php如何在php中对这种类型的复杂3d数组进行排序
【发布时间】:2017-06-06 07:44:27
【问题描述】:

数组是这样的(我用的是PHP)

array(2){[0]=>
             {[0]=>"DEF"=>
                       {[0]=>"a",[1]=>"c",[2]=>"b"},
              [1]=>"ABC"=>
                      {[0]=>"f",[1]=>"d",[2]=>"e"}},
        [1]=>
            {[0]=>"DEF"=>
                      {[0]=>"h",[1]=>"i",[2]=>"g"},
             [1]=>"ABC"=>
                      {[0]=>"k",[1]=>"l",[2]=>"j"}
            }
        }

我希望像第一个条目一样对其进行排序,即 [0] 索引有两个条目 DEF 和 ABC 所以它应该排序 ABC 和 DEF 然后在 ABC 中也应该排序 a b c。

最终的结果应该是这样的

array(2){[0]=>
             {[0]=>"ABC"=>
                       {[0]=>"d",[1]=>"e",[2]=>"f"},
              [1]=>"DEF"=>
                      {[0]=>"a",[1]=>"b",[2]=>"c"}},
        [1]=>
            {[0]=>"ABC"=>
                      {[0]=>"j",[1]=>"k",[2]=>"l"},
             [1]=>"DEF"=>
                      {[0]=>"g",[1]=>"h",[2]=>"i"}
            }
        }

提前致谢

【问题讨论】:

  • 这个符号是什么意思 "[0]=>"ABC"=>"?假设位置[0]处的值为"ABC",那么"{[0]=>"d",[1]=>"e",[2]=>"f"}" 进入什么位置?那是数组中的第二个位置吗?它是一个名为“ABC”的键的子数组吗?
  • 是的,它们是子数组,有 3 个级别,feach 索引有一个子数组,在该子数组中每个索引还有一个子数组

标签: php arrays list sorting


【解决方案1】:

PHP 有一个自定义排序选项。试试这个: http://php.net/manual/en/function.usort.php

我没用过,但我以前发现过它并记得它存在。

【讨论】:

  • 我无法定义如何将此自定义排序用于我需要的目的。
  • 正如您所指出的,它是一个复杂的 3d 数组,您的平均排序不会削减它。您可以编写自己的排序算法,也可以学习使用 usort。
【解决方案2】:

使用sort会解决问题

   $a = array(
            array(
                 "ABC"=>array("d","e","f"),
                 "DEF"=>array("a","b","c")
                ),

           array(
                "ABC"=>array("j","k","l"),
                "DEF"=>array("g","h","i")
                )
           );

  sort($a);
  var_dump($a);

结果

array(2) {
  [0]=>
  array(2) {
    ["ABC"]=>
    array(3) {
      [0]=>
      string(1) "d"
      [1]=>
      string(1) "e"
      [2]=>
      string(1) "f"
    }
    ["DEF"]=>
    array(3) {
      [0]=>
      string(1) "a"
      [1]=>
      string(1) "b"
      [2]=>
      string(1) "c"
    }
  }
  [1]=>
  array(2) {
    ["ABC"]=>
    array(3) {
      [0]=>
      string(1) "j"
      [1]=>
      string(1) "k"
      [2]=>
      string(1) "l"
    }
    ["DEF"]=>
    array(3) {
      [0]=>
      string(1) "g"
      [1]=>
      string(1) "h"
      [2]=>
      string(1) "i"
    }
  }
}

【讨论】:

  • 如果子数组的长度不同,则根据子数组的长度而不是按字母顺序排序
猜你喜欢
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多