Blogger Information
Blog 46
fans 0
comment 0
visits 39123
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
演示部分数组的排序,合并/交差并补等
lus菜
Original
736 people have browsed it

数组的排序:

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

效果预览:

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post