博客列表 >演示部分数组的排序,合并/交差并补等

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

lus菜
lus菜原创
2021年02月05日 16:12:35735浏览

数组的排序:

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>';

效果预览:

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议