欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

演示部分数组的排序,合并/交差并补等

程序员文章站 2022-03-06 13:42:09
...

数组的排序:

1.按键排序样式代码:

  1. echo '以下是数组排序:<br>';
  2. $arr = ['a' => 'a', 'b' => 3, 'c' => 'c', 'd' => 4, 'e' => 5];
  3. echo '$arr = ', print_r($arr, true), '<br>';
  4. echo '以下是 1.按键排序:<br>';
  5. // 按键升序
  6. $arra = $arr;
  7. ksort($arra);
  8. echo 'ksort: ', print_r($arra, true), '<br>';
  9. // 按键降序
  10. $arra = $arr;
  11. krsort($arra);
  12. echo 'krsort: ', print_r($arra, true);

效果预览:

演示部分数组的排序,合并/交差并补等

2. 按值排序样式代码:

  1. $arrb = ['a' => '1', 'b' => 2, 'c' => '3', 'd' => 4, 'e' => 5];
  2. echo '按值升 降序,重排索引: <br>';
  3. // 按值升序,重排索引
  4. $azpx = $arrb;
  5. sort($azpx);
  6. echo 'sort: ', print_r($azpx, true), '<br>';
  7. // 按值降序,重排索引
  8. $azpx = $arrb;
  9. rsort($azpx);
  10. echo 'rsort: ', print_r($azpx, true), '<hr>';
  11. echo '按值升 降序,键名不变<br>';
  12. $azpx = $arrb;
  13. // 按值升序,键名不变
  14. asort($azpx);
  15. echo 'asort: ', print_r($azpx, true), '<br>';
  16. $azpx = $arrb;
  17. // 按值降序,键名不变
  18. arsort($azpx);
  19. echo 'arsort: ', print_r($azpx, true);

效果预览:

演示部分数组的排序,合并/交差并补等

3.回调排序样式代码:

  1. $arrb = ['a' => '1', 'b' => 3, 'c' => '5', 'd' => 7, 'e' => 9];
  2. echo '按键名升/降序<br>';
  3. $testr = $arrb;
  4. // 回调函数按键名升序
  5. uksort($testr, function($a, $b){
  6. return $a <=> $b;
  7. });
  8. echo 'uksort: ', print_r($testr, true), '<br>';
  9. $testr = $arrb;
  10. // 回调函数按键名降序
  11. uksort($testr, function($a, $b){
  12. return $b <=> $a;
  13. });
  14. echo 'uksort: ', print_r($testr, true), '<hr>';
  15. echo '按值升/降序,重排索引<br>';
  16. $testr = $arrb;
  17. // 回调函数按值升序,重排索引
  18. usort($testr, function($a, $b){
  19. return $a <=> $b;
  20. });
  21. echo 'usort: ', print_r($testr, true), '<br>';
  22. // 回调函数按值降序,重排索引
  23. usort($testr, function($a, $b){
  24. return $b <=> $a;
  25. });
  26. echo 'usort: ', print_r($testr, true), '<hr>';
  27. echo '按值升/降序,键名不变<br>';
  28. $test = $arrb;
  29. // 回调函数按值升序,键名不变
  30. uasort($testr, function($a, $b){
  31. return $a <=> $b;
  32. });
  33. echo 'uasort: ', print_r($testr, true), '<br>';
  34. // 回调函数按值升序,键名不变
  35. uasort($testr, function($a, $b){
  36. return $b <=> $a;
  37. });
  38. echo 'uasort: ', print_r($testr, true);

效果预览:

演示部分数组的排序,合并/交差并补等

4. 自然排序样式代码:

  1. $arrc = ['a' => '1', 'b' => 3, 'c' => '5', 'd' => 7, 'e' => 9];
  2. echo ' 自然排序 : <br>';
  3. $zrps = $arrc;
  4. // 自然排序: natsort数字在前,字母在后
  5. natsort($zrps);
  6. echo 'natsort: ', print_r($zrps, true), '<hr>';
  7. // 自然排序: natcasesort数字在前字母在后
  8. natcasesort($zrps);
  9. echo 'natcasesort: ', print_r($zrps, true);

效果预览:

演示部分数组的排序,合并/交差并补等

5. 多组排序样式代码:

  1. $mnis = [
  2. ['id' => 4, 'name' => 'a-zuxu'],
  3. ['id' => 6, 'name' => 'b-zuxu'],
  4. ['id' => 5, 'name' => 'c-zuxu'],
  5. ];
  6. echo '当前二维数组:<pre>', print_r($mnis, true), '</pre><br>';
  7. // id 升序
  8. array_multisort($mnis, array_column($mnis, 'id'));
  9. echo 'array_multisort: id升序(默认) <pre>', print_r($mnis, true), '</pre><br>';
  10. // id 降序
  11. array_multisort($mnis, SORT_DESC, array_column($mnis, 'id'));
  12. echo 'array_multisort: id降序<pre>', print_r($mnis, true), '</pre><br>';
  13. // 按 name 自然排序(数字在前,字母接后)
  14. array_multisort($mnis, SORT_NATURAL, array_column($mnis, 'name'));
  15. echo 'array_multisort: name:自然排序<pre>', print_r($mnis, true), '</pre><br>';

效果预览:

演示部分数组的排序,合并/交差并补等演示部分数组的排序,合并/交差并补等

6. 反转排序样式代码:

  1. $arrb = ['a' => '1', 'b' => 2, 'c' => '3', 'd' => 4, 'e' => 5];
  2. // 数组反转排序
  3. $test = array_reverse($arrb);
  4. echo 'array_reverse: ', print_r($test, true), '<hr>';
  5. // 数组反转保留数字键名
  6. $arrc = ['a' => '2', 'b' => 4, 'c' => '6', 'd' => 8, 'e' => 10];
  7. $test = array_reverse($arrc, true);
  8. echo 'array_reverse: ', print_r($test, true), '<hr>';

效果预览:

演示部分数组的排序,合并/交差并补等

7. 随机排序样式代码:

  1. $arrd = ['a' => '1', 'b' => 2, 'c' => '3', 'd' => 4, 'e' => 5];
  2. echo '<br>';
  3. $test = $arrd;
  4. // 乱序排列,重排索引
  5. shuffle($test);
  6. echo 'shuffle: ', print_r($test, true), '<hr>';

效果预览:

演示部分数组的排序,合并/交差并补等

数组的合并

1. 键值对合并样式代码:

  1. $array1 = [0 => '1', 2 => '2', '3' => 'c'];
  2. $array2 = [1 => 'a', 'b' => 'b', 3 => 3];
  3. echo '1. 键值对合并<br>';
  4. // arr1 的值作键名,arr2 的值作值组成数组
  5. $test = array_combine($array1, $array2);
  6. echo 'array_combine: <pre>', print_r($test, true), '</pre><hr>';
  7. $test = array_merge($array1, $array2);
  8. // 数字索引重排,相同字符串键名,后值覆盖前值
  9. echo 'array_merge: <pre>', print_r($test, true), '</pre><hr>';

效果预览:

演示部分数组的排序,合并/交差并补等

2. 递归合并样式代码:

  1. $array1 = ['a' => 1, 'b' => 2, 3 => 'c'];
  2. $array2 = [1 => 'a', 'b' => 'b', 3 => 3];
  3. // 数组递归合并,相同字符串键名,值合并
  4. $test = array_merge_recursive($array1, $array2);
  5. echo 'array_merge_recursive: <pre>', print_r($test, true), '</pre><hr>';

效果预览:

演示部分数组的排序,合并/交差并补等

数组成员的统计样式代码:

  1. $array1 = ['a' => 1, 'b' => 2, 'c' => 3];
  2. $array2 = [1 => 'a', 'b' => 'b', 3 => 3];
  3. /* 数组成员的统计 */
  4. $test = $array1 + $array2;
  5. echo '$test = ', print_r($test, true), '<br>';
  6. // 统计数组中项目个数
  7. echo 'count($test) : ', count($test), '<hr>';
  8. echo '2. 统计值出现过的数组次数<br>';
  9. // 数组由值组成键名,值出现的次数为值
  10. echo 'array_count_values($test) : <pre>', print_r(array_count_values($test), true), '</pre>';

效果预览:

演示部分数组的排序,合并/交差并补等

4. 数组的交差并补

数组交集样式代码:

  1. $array1 = ['a' => 'b', 'b' => 'a', 1 => 'a', 2 => 'b'];
  2. $array2 = [1 => 'a', 'a' => 'b', 'b' => 1];
  3. echo "\$$array1 = ['a' => 'b', 'b' => 'a', 1 => 'a', 2 => 'b'];<br>";
  4. echo "\$$array2 = [1 => 'a', 'a' => 'b', 'b' => 1];<hr>";
  5. echo '1.数组交集值相等型<br>';
  6. // 数组交集,只需值相等(主从数组键名不同时,保留主数组的键名)
  7. echo 'array_intersect : ', print_r(array_intersect($array1, $array2), true), '<hr>';
  8. echo '2.数组交集键值严格相等型<br>';
  9. // 数组交集,键值严格相等
  10. echo 'array_intersect_assoc : ', print_r(array_intersect_assoc($array1, $array2), true), '<hr>';
  11. echo '3.数组交集键相等型<br>';
  12. // 数组交集,键相等(主从数组值不同时,保留主数组的值)
  13. echo 'array_intersect_key : ', print_r(array_intersect_key($array1, $array2), true), '<hr>';

效果预览:

演示部分数组的排序,合并/交差并补等

数组差集样式代码:

  1. $array1 = ['a' => 'b', 'b' => 'a', 1 => 'a', 2 => 'b'];
  2. $array2 = [1 => 'a', 'a' => 'b', 'b' => 1];
  3. echo '1. 数组差集值相等型<br>';
  4. // 数组差集,只需值相等(主从数组键名diff不同时,保留主数组的键名)
  5. echo 'array_diff : ', print_r(array_diff($array1, $array2), true), '<hr>';
  6. echo '2. 数组差集键值严格相等型<br>';
  7. // 数组差集,键值严格相等
  8. echo 'array_diff_assoc : ', print_r(array_diff_assoc($array1, $array2), true), '<hr>';
  9. echo '3. 数组差集键相等型<br>';
  10. // 数组差集,键相等(主从数组值不同时,保留主数组的值)
  11. echo 'array_diff_key : ', print_r(array_diff_key($array1, $array2), true), '<hr>';

效果预览:

演示部分数组的排序,合并/交差并补等

数组并集的样式代码:

  1. $array1 = ['a' => 'b', 'b' => 'a', 1 => 'a', 2 => 'b'];
  2. $array2 = [1 => 'a', 'a' => 'b', 'b' => 1];
  3. echo '1. 数组并集前值覆盖后值型<br>';
  4. echo '$arr1 + $arr2 : ', print_r($array1 + $array2, true), '<hr>';
  5. echo '2. 数组并集后值覆盖前值型<br>';
  6. // 数字索引重排,相同字符串键名,后值覆盖前值
  7. echo 'array_merge : ', print_r(array_merge($array1, $array2), true), '<hr>';
  8. echo '3. 递归合并:<br>';
  9. // 数组递归合并,相同字符串键名,值合并
  10. echo 'array_merge_recursive : <pre>', print_r(array_merge_recursive($array1, $array2), true), '</pre><hr>';

效果预览:

演示部分数组的排序,合并/交差并补等