代码之家  ›  专栏  ›  技术社区  ›  Naveed

如何按字母顺序对数组的值排序?

  •  10
  • Naveed  · 技术社区  · 14 年前

    我想在PHP中按字母顺序对数组的值进行排序。如果所有值都以相同的字符开头,那么应该使用第二个字符等对它们进行排序。忽略区分大小写。

    例如:

    before:
    values[0] = "programming";
    values[1] = "Stackoverflow";
    values[2] = "question";
    values[3] = "answers";
    values[4] = "AA Systems";
    
    after:
    values[0] = "AA Systems";
    values[1] = "answers";
    values[2] = "programming";
    values[3] = "question";
    values[4] = "Stackoverflow";
    

    我已经找到了一些算法,但是我想要一种快速且语句数量少的方法。忽视区分大小写对我来说很特别。谢谢。

    4 回复  |  直到 8 年前
        1
  •  14
  •   kennytm    14 年前

        2
  •  5
  •   Anthony    11 年前

    您的示例有两个假设:

    1. 只处理简单的一维数组。

    2. 在按字母顺序排序之后,索引将更新,以便按字母顺序为第一个元素分配键0等。

    考虑到这些参数,最简单的解决方案是使用数组方法 sort() . 举个例子:

    $values[0] = "programming";
    $values[1] = "Stackoverflow";
    $values[2] = "question";
    $values[3] = "answers";
    $values[4] = "AA Systems";
    
    sort($values);
    

    结果如下:

    Array {
         [0] => AA Systems
         [1] => Stackoverflow
         [2] => answers
         [3] => programming
         [4] => question
    }
    

    other array sorting functions 那可能更合适。例如,我上面使用的一个简单的将大写放在小写前面,所以如果您将“security”作为一个项(全部小写),它将在“stackoverflow”之后,因为大写 s 优先于 se VS st . 如果不区分大小写,可以使用 natcasesort() ,将使用给定的数组生成以下内容:

    Array {
         [0] => AA Systems
         [1] => answers
         [2] => programming
         [3] => question
         [4] => Stackoverflow
    }
    
        3
  •  4
  •   Doug Kavendek    12 年前

    从5.4.0版开始,您可以使用 sort , asort , ksort 等函数并传递 SORT_FLAG_CASE 旗帜。

    sort( $array, SORT_FLAG_CASE );  // Non-associative array
    asort( $array, SORT_FLAG_CASE ); // Associative array
    ksort( $array, SORT_FLAG_CASE ); // Associative array, sort by indices
    

    如果您有一个旧版本,但尚未准备好更新(或无法更新),则可以使用 natcasesort 正如其他人提到的,但是 uasort 对数组按照键名排序 变体与 strcasecmp 作为自定义函数:

    natcasesort( $array );          // Non-associative array
    uasort( $array, 'strcasecmp' ); // Associative array
    uksort( $array, 'strcasecmp' ); // Associative array, sort by indices
    

    您可以将相同的概念应用于其他任何一个 sorting functions .

        4
  •  0
  •   Arsen K. pastullo    10 年前

    你可以使用 uasort() : http://php.net/manual/en/function.uasort.php

    uasort( $arr, 'strcasecmp' );
    

    第二个参数是一个函数,用于比较值。函数必须返回-1、0或1。这是一个模板,可以用于自定义函数。

    function cmp( $a, $b ) {
      if ( $a == $b ) return 0;
      elseif ( $a > $b ) return 1;
      elseif ( $a < $b ) return -1;
    }
    
    uasort( $arr, 'cmp' );
    

    排序后,您可能需要重置数组索引。

    $arr = array_values( $arr );