【问题标题】:Array sort by the index variable数组按索引变量排序
【发布时间】:2012-11-07 05:57:08
【问题描述】:

我在对如下所示的简单数组进行排序时遇到了一些困难:

Array
(
    [3] => Array
        (
            [0] => EU West (Ireland)
            [1] => eu-west-1
        )

    [7] => Array
        (
            [0] => South America (Sao paulo)
            [1] => sa-east-1
        )

    [0] => Array
        (
            [0] => US East (Virginia)
            [1] => us-east-1
        )

    [4] => Array
        (
            [0] => Asia Pasific (Tokyo)
            [1] => ap-northeast-1
        )

    [2] => Array
        (
            [0] => US West (Oregon)
            [1] => us-west-2
        )

    [1] => Array
        (
            [0] => US West (N. California)
            [1] => us-west-1
        )

    [5] => Array
        (
            [0] => Asia Pasific (Singapore)
            [1] => ap-southeast-1
        )

    [6] => Array
        (
            [0] => Asia Pasific (Sydney)
            [1] => ap-southeast-2
        )

)

我想在索引上对这个数组进行排序。我使用了ksort(),但它不起作用,它会留下输出 1。

【问题讨论】:

    标签: php multidimensional-array sorting


    【解决方案1】:

    ksort() 不返回排序后的数组,而是对数组进行适当的排序。调用ksort($array)后,$array的内容会被排序。该函数返回排序是否成功。

    例子:

    $array = array(1 => 1, 20 => 1, 5 => 1);
    
    echo "Before ksort():\n";
    print_r($array);
    
    if (ksort($array)) {
        echo "ksort() completed successfully.\n";
    }
    
    echo "After ksort():\n";
    print_r($array);
    

    以上打印:

    Before ksort():
    Array
    (
        [1] => 1
        [20] => 1
        [5] => 1
    )
    ksort() completed successfully.
    After ksort():
    Array
    (
        [1] => 1
        [5] => 1
        [20] => 1
    )
    

    您不应该检查ksort() 的返回值,因为ksort() 只能在它甚至无法返回失败的情况下失败。因此,函数要么返回true,要么脚本死掉,在这种情况下,返回值无关紧要(它总是true)。

    【讨论】:

      【解决方案2】:

      排序对数组使用传递引用,返回值是布尔值成功或失败。 我假设你在做

      $myArray = ksort($myArray);
      

      改成

      $sorted = ksort($myArray);
      if (!$sorted) {
          echo 'Failed to sort';
      }
      

      【讨论】:

      • 你能把这个缩小到 if(!ksort($myArray)) { //failed } 吗?
      • 大部分人根本懒得去测试返回状态,我这里只是为了说明返回值是成功/失败状态
      • 确实,如果它失败了,你也无能为力,而且失败的原因可能很模糊......实际上,除非发生一些灾难性问题,否则它确实不会失败,在这种情况下,ksort() 失败将是最少的问题。
      • (其实看源码,我看到ksort()只会在pemalloc()失败或者函数参数不正确的情况下才会失败,而且无论哪种情况,脚本都应该在之前死掉ksort() 甚至可以返回)
      【解决方案3】:

      像这样使用

      ksort($array);
      

      在那之后打印

      print_r($array);
      

      如果你用过

      print_r(ksort($array));
      

      如果数组已排序则返回 1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-01
        • 1970-01-01
        • 2020-02-21
        • 2017-05-22
        • 2014-02-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多