演示部分数组的排序,合并/交差并补等
程序员文章站
2022-03-06 13:42:09
...
数组的排序:
1.按键排序样式代码:
echo '以下是数组排序:<br>';
$arr = ['a' => 'a', 'b' => 3, 'c' => 'c', 'd' => 4, 'e' => 5];
echo '$arr = ', print_r($arr, true), '<br>';
echo '以下是 1.按键排序:<br>';
// 按键升序
$arra = $arr;
ksort($arra);
echo 'ksort: ', print_r($arra, true), '<br>';
// 按键降序
$arra = $arr;
krsort($arra);
echo 'krsort: ', print_r($arra, true);
效果预览:
2. 按值排序样式代码:
$arrb = ['a' => '1', 'b' => 2, 'c' => '3', 'd' => 4, 'e' => 5];
echo '按值升 降序,重排索引: <br>';
// 按值升序,重排索引
$azpx = $arrb;
sort($azpx);
echo 'sort: ', print_r($azpx, true), '<br>';
// 按值降序,重排索引
$azpx = $arrb;
rsort($azpx);
echo 'rsort: ', print_r($azpx, true), '<hr>';
echo '按值升 降序,键名不变<br>';
$azpx = $arrb;
// 按值升序,键名不变
asort($azpx);
echo 'asort: ', print_r($azpx, true), '<br>';
$azpx = $arrb;
// 按值降序,键名不变
arsort($azpx);
echo 'arsort: ', print_r($azpx, true);
效果预览:
3.回调排序样式代码:
$arrb = ['a' => '1', 'b' => 3, 'c' => '5', 'd' => 7, 'e' => 9];
echo '按键名升/降序<br>';
$testr = $arrb;
// 回调函数按键名升序
uksort($testr, function($a, $b){
return $a <=> $b;
});
echo 'uksort: ', print_r($testr, true), '<br>';
$testr = $arrb;
// 回调函数按键名降序
uksort($testr, function($a, $b){
return $b <=> $a;
});
echo 'uksort: ', print_r($testr, true), '<hr>';
echo '按值升/降序,重排索引<br>';
$testr = $arrb;
// 回调函数按值升序,重排索引
usort($testr, function($a, $b){
return $a <=> $b;
});
echo 'usort: ', print_r($testr, true), '<br>';
// 回调函数按值降序,重排索引
usort($testr, function($a, $b){
return $b <=> $a;
});
echo 'usort: ', print_r($testr, true), '<hr>';
echo '按值升/降序,键名不变<br>';
$test = $arrb;
// 回调函数按值升序,键名不变
uasort($testr, function($a, $b){
return $a <=> $b;
});
echo 'uasort: ', print_r($testr, true), '<br>';
// 回调函数按值升序,键名不变
uasort($testr, function($a, $b){
return $b <=> $a;
});
echo 'uasort: ', print_r($testr, true);
效果预览:
4. 自然排序样式代码:
$arrc = ['a' => '1', 'b' => 3, 'c' => '5', 'd' => 7, 'e' => 9];
echo ' 自然排序 : <br>';
$zrps = $arrc;
// 自然排序: natsort数字在前,字母在后
natsort($zrps);
echo 'natsort: ', print_r($zrps, true), '<hr>';
// 自然排序: natcasesort数字在前字母在后
natcasesort($zrps);
echo 'natcasesort: ', print_r($zrps, true);
效果预览:
5. 多组排序样式代码:
$mnis = [
['id' => 4, 'name' => 'a-zuxu'],
['id' => 6, 'name' => 'b-zuxu'],
['id' => 5, 'name' => 'c-zuxu'],
];
echo '当前二维数组:<pre>', print_r($mnis, true), '</pre><br>';
// id 升序
array_multisort($mnis, array_column($mnis, 'id'));
echo 'array_multisort: id升序(默认) <pre>', print_r($mnis, true), '</pre><br>';
// id 降序
array_multisort($mnis, SORT_DESC, array_column($mnis, 'id'));
echo 'array_multisort: id降序<pre>', print_r($mnis, true), '</pre><br>';
// 按 name 自然排序(数字在前,字母接后)
array_multisort($mnis, SORT_NATURAL, array_column($mnis, 'name'));
echo 'array_multisort: name:自然排序<pre>', print_r($mnis, true), '</pre><br>';
效果预览:
6. 反转排序样式代码:
$arrb = ['a' => '1', 'b' => 2, 'c' => '3', 'd' => 4, 'e' => 5];
// 数组反转排序
$test = array_reverse($arrb);
echo 'array_reverse: ', print_r($test, true), '<hr>';
// 数组反转保留数字键名
$arrc = ['a' => '2', 'b' => 4, 'c' => '6', 'd' => 8, 'e' => 10];
$test = array_reverse($arrc, true);
echo 'array_reverse: ', print_r($test, true), '<hr>';
效果预览:
7. 随机排序样式代码:
$arrd = ['a' => '1', 'b' => 2, 'c' => '3', 'd' => 4, 'e' => 5];
echo '<br>';
$test = $arrd;
// 乱序排列,重排索引
shuffle($test);
echo 'shuffle: ', print_r($test, true), '<hr>';
效果预览:
数组的合并
1. 键值对合并样式代码:
$array1 = [0 => '1', 2 => '2', '3' => 'c'];
$array2 = [1 => 'a', 'b' => 'b', 3 => 3];
echo '1. 键值对合并<br>';
// arr1 的值作键名,arr2 的值作值组成数组
$test = array_combine($array1, $array2);
echo 'array_combine: <pre>', print_r($test, true), '</pre><hr>';
$test = array_merge($array1, $array2);
// 数字索引重排,相同字符串键名,后值覆盖前值
echo 'array_merge: <pre>', print_r($test, true), '</pre><hr>';
效果预览:
2. 递归合并样式代码:
$array1 = ['a' => 1, 'b' => 2, 3 => 'c'];
$array2 = [1 => 'a', 'b' => 'b', 3 => 3];
// 数组递归合并,相同字符串键名,值合并
$test = array_merge_recursive($array1, $array2);
echo 'array_merge_recursive: <pre>', print_r($test, true), '</pre><hr>';
效果预览:
数组成员的统计样式代码:
$array1 = ['a' => 1, 'b' => 2, 'c' => 3];
$array2 = [1 => 'a', 'b' => 'b', 3 => 3];
/* 数组成员的统计 */
$test = $array1 + $array2;
echo '$test = ', print_r($test, true), '<br>';
// 统计数组中项目个数
echo 'count($test) : ', count($test), '<hr>';
echo '2. 统计值出现过的数组次数<br>';
// 数组由值组成键名,值出现的次数为值
echo 'array_count_values($test) : <pre>', print_r(array_count_values($test), true), '</pre>';
效果预览:
4. 数组的交差并补
数组交集样式代码:
$array1 = ['a' => 'b', 'b' => 'a', 1 => 'a', 2 => 'b'];
$array2 = [1 => 'a', 'a' => 'b', 'b' => 1];
echo "\$$array1 = ['a' => 'b', 'b' => 'a', 1 => 'a', 2 => 'b'];<br>";
echo "\$$array2 = [1 => 'a', 'a' => 'b', 'b' => 1];<hr>";
echo '1.数组交集值相等型<br>';
// 数组交集,只需值相等(主从数组键名不同时,保留主数组的键名)
echo 'array_intersect : ', print_r(array_intersect($array1, $array2), true), '<hr>';
echo '2.数组交集键值严格相等型<br>';
// 数组交集,键值严格相等
echo 'array_intersect_assoc : ', print_r(array_intersect_assoc($array1, $array2), true), '<hr>';
echo '3.数组交集键相等型<br>';
// 数组交集,键相等(主从数组值不同时,保留主数组的值)
echo 'array_intersect_key : ', print_r(array_intersect_key($array1, $array2), true), '<hr>';
效果预览:
数组差集样式代码:
$array1 = ['a' => 'b', 'b' => 'a', 1 => 'a', 2 => 'b'];
$array2 = [1 => 'a', 'a' => 'b', 'b' => 1];
echo '1. 数组差集值相等型<br>';
// 数组差集,只需值相等(主从数组键名diff不同时,保留主数组的键名)
echo 'array_diff : ', print_r(array_diff($array1, $array2), true), '<hr>';
echo '2. 数组差集键值严格相等型<br>';
// 数组差集,键值严格相等
echo 'array_diff_assoc : ', print_r(array_diff_assoc($array1, $array2), true), '<hr>';
echo '3. 数组差集键相等型<br>';
// 数组差集,键相等(主从数组值不同时,保留主数组的值)
echo 'array_diff_key : ', print_r(array_diff_key($array1, $array2), true), '<hr>';
效果预览:
数组并集的样式代码:
$array1 = ['a' => 'b', 'b' => 'a', 1 => 'a', 2 => 'b'];
$array2 = [1 => 'a', 'a' => 'b', 'b' => 1];
echo '1. 数组并集前值覆盖后值型<br>';
echo '$arr1 + $arr2 : ', print_r($array1 + $array2, true), '<hr>';
echo '2. 数组并集后值覆盖前值型<br>';
// 数字索引重排,相同字符串键名,后值覆盖前值
echo 'array_merge : ', print_r(array_merge($array1, $array2), true), '<hr>';
echo '3. 递归合并:<br>';
// 数组递归合并,相同字符串键名,值合并
echo 'array_merge_recursive : <pre>', print_r(array_merge_recursive($array1, $array2), true), '</pre><hr>';
效果预览:
上一篇: 两级普通list转树形结构