【问题标题】:Sorting multidimentional Array Keys As Number将多维数组键排序为数字
【发布时间】:2012-11-28 09:10:26
【问题描述】:

我在对多维数组进行排序时遇到问题。

print_r($myarray); 给出以下输出:

Array
(
    [0] => Array
        (
            [ID] => 10
            [Code] => 12-111
            [Name] => putup1
        )

    [1] => Array
        (
            [ID] => 11
            [Code] => 12-21
            [Name] => putup2
        )
    [2] => Array
        (
            [ID] => 12
            [Code] => 12-1
            [Name] => putup2
        ) 
  )

我从这个链接中获取了一个参考:Sort MultiDimensional Array 并使用列 Code 进行了排序。它给了我这样的输出:

Array
    (
      [0] => Array
                 (
                  [ID] => 10
                  [Code] => 12-1
                  [Name] => putup1
                 )
      [1] => Array
                 (
                   [ID] => 12
                   [Code] => 12-111
                   [Name] => putup2
                 ) 
      [2] => Array
                 (
                   [ID] => 11
                   [Code] => 12-21
                   [Name] => putup2
                 )
     )

我期待这样的输出:

Array
        (
          [0] => Array
                     (
                      [ID] => 10
                      [Code] => 12-1
                      [Name] => putup1
                     )
          
          [2] => Array
                     (
                       [ID] => 11
                       [Code] => 12-21
                       [Name] => putup2
                     )
         [1] => Array
                     (
                       [ID] => 12
                       [Code] => 12-111
                       [Name] => putup2
                     ) 
         )

有可能吗?请建议我... 谢谢你:)

【问题讨论】:

标签: php codeigniter multidimensional-array sorting


【解决方案1】:

您目前正在对代码进行排序,但以文本而非数字的形式进行排序。要根据需要对其进行排序,您必须编写一个比较函数来指示一个代码是否大于另一个代码:

function sortByCode($a, $b) {
    $aParts = explode('-', $a['Code']);
    $bParts = explode('-', $b['Code']);
    for ($i = 0; $i < count($aParts); $i++) {
        if ($aParts[$i] < $bParts[$i]) {
            return -1;
        } else if ($aParts[$i] > $bParts[$i]) {
            return 1;
        }
    }
    return 0;
}

usort($myArray, 'sortByCode');

【讨论】:

    猜你喜欢
    • 2010-10-28
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多