PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

博客列表 > 数组的排序, 数组的合并, 数组成员的统计

数组的排序, 数组的合并, 数组成员的统计

zl的php学习博客
zl的php学习博客 原创
2021年01月30日 17:06:17 688浏览

1. 数组的排序:

排序函数的参数相同(数组, 比较的类型,默认正常)

1.正向排序:sort()

  1. $arrSort = [];
  2. for ($i = 0; $i < 100; $i++) {
  3. $arrSort[] = (int)(lcg_value() * 1000);
  4. }
  5. //echo '排序前:', print_r($arrSort), '<br>';
  6. echo '排序前:<pre>' . print_r($arrSort, true) . '</pre><br>';
  7. sort($arrSort);
  8. //echo '排序后:', print_r($arrSort), '<br>';
  9. echo '排序后:<pre>' . print_r($arrSort, true) . '</pre><br>';

2.逆向排序:rsort()

  1. $arrSort = [];
  2. for ($i = 0; $i < 100; $i++) {
  3. $arrSort[] = (int)(lcg_value() * 1000);
  4. }
  5. //echo '排序前:', print_r($arrSort), '<br>';
  6. echo '排序前:<pre>' . print_r($arrSort, true) . '</pre><br>';
  7. rsort($arrSort);
  8. //echo '排序后:', print_r($arrSort), '<br>';
  9. echo '排序后:<pre>' . print_r($arrSort, true) . '</pre><br>';
  1. ##3.按照键名正向排序:ksort()
  2. ```php
  3. $arr105 = ['101' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9, '10' => 10];
  4. echo '排序前:<pre>' . print_r($arr105, true) . '</pre><br>';
  5. ksort($arr105);
  6. echo '排序后:<pre>' . print_r($arr105, true) . '</pre><br>';

4.按照键名逆向排序:krsort()

  1. $arr105 = ['101' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9, '10' => 10];
  2. echo '排序前:<pre>' . print_r($arr105, true) . '</pre><br>';
  3. krsort($arr105);
  4. echo '排序后:<pre>' . print_r($arr105, true) . '</pre><br>';

5.正向排序并保持索引关系(按照值排序):asort()

  1. $arrAsort = ['101' => 101, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7, '8' => 10, '9' => 9, '10' => 8];
  2. echo '排序前:<pre>' . print_r($arrAsort, true) . '</pre><br>';
  3. asort($arrAsort);
  4. echo '排序后:<pre>' . print_r($arrAsort, true) . '</pre><br>';

6.逆向排序并保持索引关系(按照值排序):arsort()

  1. $arrArsort = ['101' => 101, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7, '8' => 10, '9' => 9, '10' => 8];
  2. echo '排序前:<pre>' . print_r($arrArsort, true) . '</pre><br>';
  3. arsort($arrArsort);
  4. echo '排序后:<pre>' . print_r($arrArsort, true) . '</pre><br>';

7.多个数组或多维数组进行排序:array_multisort()

  1. $arr9 = [
  2. ['id' => 3, 'name' => 'user', 'age' => 22],
  3. ['id' => 1, 'name' => 'admin', 'age' => 18],
  4. ['id' => 5, 'name' => 'user', 'age' => 26],
  5. ['id' => 2, 'name' => 'user', 'age' => 20],
  6. ['id' => 4, 'name' => 'user', 'age' => 24],
  7. ['id' => 6, 'name' => 'user', 'age' => 28],
  8. ];
  9. echo '排序前:<pre>' . print_r($arr9, true) . '</pre><br>';
  10. array_multisort($arr9);
  11. echo '排序后:<pre>' . print_r($arr9, true) . '</pre><br>';

8.自定义排序

  1. // usort — 使用用户自定义的比较函数对数组中的值进行排序(sort函数的进阶版)
  2. // uksort — 使用用户自定义的比较函数对数组中的键名进行排序(ksort函数的进阶版)
  3. // uasort — 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联(asort函数的进阶版)
  4. $arrusort = [10,2,11,22,3,4];
  5. echo '排序前:<pre>' . print_r($arrusort, true) . '</pre><br>';
  6. usort($arrusort, function ($a, $b) {
  7. if ($a === $b) return 0;
  8. return $a < $b ? 1 : -1;
  9. });
  10. echo '排序后:<pre>' . print_r($arrusort, true) . '</pre><br>';
  11. $arr9 = [
  12. ['id' => 3, 'name' => 'user', 'age' => 22],
  13. ['id' => 1, 'name' => 'admin', 'age' => 18],
  14. ['id' => 5, 'name' => 'user', 'age' => 26],
  15. ['id' => 2, 'name' => 'user', 'age' => 20],
  16. ['id' => 4, 'name' => 'user', 'age' => 24],
  17. ['id' => 6, 'name' => 'user', 'age' => 28],
  18. ];
  19. //echo '排序前:<pre>' . print_r($arr9, true) . '</pre><br>';
  20. //usort($arr9, function ($a, $b) {
  21. // if ($a['id'] === $b['id']) return 0;
  22. // return $a['id'] < $b['id'] ? 1 : -1;
  23. //});
  24. //echo '排序后:<pre>' . print_r($arr9, true) . '</pre><br>';
  25. //
  26. //echo '排序前:<pre>' . print_r($arr9, true) . '</pre><br>';
  27. //uasort($arr9, function ($a, $b) {
  28. // if ($a['id'] === $b['id']) return 0;
  29. // return $a['id'] < $b['id'] ? 1 : -1;
  30. //});
  31. //echo '排序后:<pre>' . print_r($arr9, true) . '</pre><br>';
  32. //
  33. echo '排序前:<pre>' . print_r($arr9, true) . '</pre><br>';
  34. uasort($arr9, function ($a, $b) {
  35. if ($a['id'] === $b['id']) return 0;
  36. return $a['id'] < $b['id'] ? 1 : -1;
  37. });
  38. echo '排序后:<pre>' . print_r($arr9, true) . '</pre><br>';

2. 数组的合并: array_merge()

  1. $arr105 = ['101' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9, '10' => 10];
  2. $arr106 = ['10' => 10, '20' => 20, '30' => 30, '40' => 40, '50' => 50, '60' => 60, '70' => 70, '80' => 80, '90' => 90, '100' => 100];
  3. $arr107 = ['100' => 100, '200' => 200, '300' => 300, '400' => 400, '500' => 500, '600' => 600, '700' => 700, '800' => 800, '900' => 900, '1000' => 1000];
  4. $arr108 = ['1000' => 1000, '2000' => 2000, '3000' => 3000, '4000' => 4000, '5000' => 5000, '6000' => 6000, '7000' => 7000, '800' => 8000, '9000' => 9000, '10000' => 10000];
  5. $result = array_merge($arr105,$arr106,$arr107,$arr108);
  6. echo print_r($result), '<br>';
  7. echo '<pre>' . print_r($result, true) . '</pre><br>';

3. 数组成员的统计: array_count_values()

  1. // 数组成员的统计: array_count_values()
  2. // 补: array_column(数组, 返回的key和值): 获取数组中的指定key和它的值
  3. $arrCount = [];
  4. for ($i = 0; $i < 100; $i++) {
  5. $arrCount[] = (int)(lcg_value() * 10);
  6. }
  7. echo print_r($arrCount), '<br>';
  8. echo print_r(array_count_values($arrCount)), '<hr>';
  9. $arrCount1 = [
  10. ['id' => 3, 'name' => 'user', 'age' => 28],
  11. ['id' => 1, 'name' => 'admin', 'age' => 18],
  12. ['id' => 5, 'name' => 'user', 'age' => 26],
  13. ['id' => 2, 'name' => 'user', 'age' => 18],
  14. ['id' => 4, 'name' => 'user', 'age' => 26],
  15. ['id' => 6, 'name' => 'user', 'age' => 28],
  16. ];
  17. echo print_r($arrCount1), '<br>';
  18. echo print_r(array_count_values(array_column($arrCount1, 'age'))), '<hr>';
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议