插件窝 干货文章 php数组排序的方法有哪几种

php数组排序的方法有哪几种

数组 array 排序 函数 438    来源:    2025-03-18

在PHP中,数组排序是一个常见的操作。PHP提供了多种内置函数来对数组进行排序,每种函数适用于不同的场景。以下是几种常见的数组排序方法:

1. sort() 函数

  • 功能: 对数组进行升序排序。
  • 特点: 会重新索引数组的键名(适用于索引数组)。
  • 示例: php $numbers = array(4, 2, 8, 6); sort($numbers); print_r($numbers); // 输出: Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 )

2. rsort() 函数

  • 功能: 对数组进行降序排序。
  • 特点: 会重新索引数组的键名(适用于索引数组)。
  • 示例: php $numbers = array(4, 2, 8, 6); rsort($numbers); print_r($numbers); // 输出: Array ( [0] => 8 [1] => 6 [2] => 4 [3] => 2 )

3. asort() 函数

  • 功能: 对数组进行升序排序,并保持键值关联。
  • 特点: 适用于关联数组,保留键名。
  • 示例: php $age = array("Peter"=>35, "Ben"=>37, "Joe"=>43); asort($age); print_r($age); // 输出: Array ( [Peter] => 35 [Ben] => 37 [Joe] => 43 )

4. arsort() 函数

  • 功能: 对数组进行降序排序,并保持键值关联。
  • 特点: 适用于关联数组,保留键名。
  • 示例: php $age = array("Peter"=>35, "Ben"=>37, "Joe"=>43); arsort($age); print_r($age); // 输出: Array ( [Joe] => 43 [Ben] => 37 [Peter] => 35 )

5. ksort() 函数

  • 功能: 根据键名对数组进行升序排序。
  • 特点: 适用于关联数组,按键名排序。
  • 示例: php $age = array("Peter"=>35, "Ben"=>37, "Joe"=>43); ksort($age); print_r($age); // 输出: Array ( [Ben] => 37 [Joe] => 43 [Peter] => 35 )

6. krsort() 函数

  • 功能: 根据键名对数组进行降序排序。
  • 特点: 适用于关联数组,按键名排序。
  • 示例: php $age = array("Peter"=>35, "Ben"=>37, "Joe"=>43); krsort($age); print_r($age); // 输出: Array ( [Peter] => 35 [Joe] => 43 [Ben] => 37 )

7. usort() 函数

  • 功能: 使用用户自定义的比较函数对数组进行排序。
  • 特点: 适用于需要自定义排序规则的场景。
  • 示例:

    function cmp($a, $b) {
      if ($a == $b) {
          return 0;
      }
      return ($a < $b) ? -1 : 1;
    }
    
    $numbers = array(4, 2, 8, 6);
    usort($numbers, "cmp");
    print_r($numbers);
    // 输出: Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 )
    

8. uasort() 函数

  • 功能: 使用用户自定义的比较函数对数组进行排序,并保持键值关联。
  • 特点: 适用于关联数组,保留键名。
  • 示例:

    function cmp($a, $b) {
      if ($a == $b) {
          return 0;
      }
      return ($a < $b) ? -1 : 1;
    }
    
    $age = array("Peter"=>35, "Ben"=>37, "Joe"=>43);
    uasort($age, "cmp");
    print_r($age);
    // 输出: Array ( [Peter] => 35 [Ben] => 37 [Joe] => 43 )
    

9. uksort() 函数

  • 功能: 使用用户自定义的比较函数对数组的键名进行排序。
  • 特点: 适用于关联数组,按键名排序。
  • 示例:

    function cmp($a, $b) {
      if ($a == $b) {
          return 0;
      }
      return ($a < $b) ? -1 : 1;
    }
    
    $age = array("Peter"=>35, "Ben"=>37, "Joe"=>43);
    uksort($age, "cmp");
    print_r($age);
    // 输出: Array ( [Ben] => 37 [Joe] => 43 [Peter] => 35 )
    

10. natsort() 函数

  • 功能: 使用“自然排序”算法对数组进行排序。
  • 特点: 适用于需要按自然顺序排序的场景(如文件名排序)。
  • 示例: php $files = array("img12.png", "img10.png", "img2.png", "img1.png"); natsort($files); print_r($files); // 输出: Array ( [3] => img1.png [2] => img2.png [1] => img10.png [0] => img12.png )

11. natcasesort() 函数

  • 功能: 使用“自然排序”算法对数组进行排序,不区分大小写。
  • 特点: 适用于需要按自然顺序排序且不区分大小写的场景。
  • 示例: php $files = array("img12.png", "Img10.png", "img2.png", "Img1.png"); natcasesort($files); print_r($files); // 输出: Array ( [3] => Img1.png [2] => img2.png [1] => Img10.png [0] => img12.png )

12. array_multisort() 函数

  • 功能: 对多个数组或多维数组进行排序。
  • 特点: 适用于需要对多个数组或多维数组进行排序的场景。
  • 示例:

    $data = array(
      array("volume" => 67, "edition" => 2),
      array("volume" => 86, "edition" => 1),
      array("volume" => 85, "edition" => 6),
      array("volume" => 98, "edition" => 2),
      array("volume" => 86, "edition" => 6),
      array("volume" => 67, "edition" => 7),
    );
    
    $volumes = array_column($data, 'volume');
    $editions = array_column($data, 'edition');
    
    array_multisort($volumes, SORT_DESC, $editions, SORT_ASC, $data);
    print_r($data);
    // 输出: Array ( [0] => Array ( [volume] => 98 [edition] => 2 ) [1] => Array ( [volume] => 86 [edition] => 1 ) [2] => Array ( [volume] => 86 [edition] => 6 ) [3] => Array ( [volume] => 85 [edition] => 6 ) [4] => Array ( [volume] => 67 [edition] => 2 ) [5] => Array ( [volume] => 67 [edition] => 7 ) )
    

总结

PHP提供了丰富的数组排序函数,可以根据不同的需求选择合适的函数。常见的排序函数包括sort()rsort()asort()arsort()ksort()krsort()usort()uasort()uksort()natsort()natcasesort()array_multisort()。根据数组的类型(索引数组或关联数组)以及排序的需求(升序、降序、自然排序等),可以选择合适的函数来实现排序。