一,数组的排序操作
<?php
// 1. bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
// 本函数对数组进行排序。当本函数结束时数组单元将被从最低到最高重新安排
// bool rsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
// 本函数对数组进行逆向排序(最高到最低)。
$arr1 = [23,2,89,17,3];
$arr2 = ['html','css','javascript','php','mysql'];
echo '排序前:<pre>';
print_r($arr1);print_r($arr2);
echo '</pre>';
// 排序前:
// Array
// (
// [0] => 23
// [1] => 2
// [2] => 89
// [3] => 17
// [4] => 3
// )
// Array
// (
// [0] => html
// [1] => css
// [2] => javascript
// [3] => php
// [4] => mysql
// )
echo '<hr>';
// sort($arr1);sort($arr2); // 正向排序
rsort($arr1);rsort($arr2); // 反向排序
echo '排序后:<pre>';
print_r($arr1);print_r($arr2);
echo '</pre>';
// 正向排序后:
// Array
// (
// [0] => 2
// [1] => 3
// [2] => 17
// [3] => 23
// [4] => 89
// )
// Array
// (
// [0] => css
// [1] => html
// [2] => javascript
// [3] => mysql
// [4] => php
// )
// 反向排序后:
// Array
// (
// [0] => 89
// [1] => 23
// [2] => 17
// [3] => 3
// [4] => 2
// )
// Array
// (
// [0] => php
// [1] => mysql
// [2] => javascript
// [3] => html
// [4] => css
// )
// 2. 数组按键名排序与以上值的排序相似
// ksort — 对数组按照键名排序
// krsort — 对数组按照键名逆向排序
echo '<hr>';
// 3. 以上sort和rsort都会使得数组失去原来的索引关系,返回的都是默认索引数组,但是有时需要保留索引关系;
// asort — 对数组进行排序并保持索引关系
// asort — 对数组进行排序并保持索引关系
$arr3 = [23,2,89,17,3];
$arr4 = ['html','css','javascript','php','mysql'];
asort($arr3);asort($arr4); // 正向排序
// rsort($arr3);rsort($arr4); // 反向排序
echo '保持索引排序后:<pre>';
print_r($arr3);print_r($arr4);
echo '</pre>';
// 保持索引排序后:
// Array
// (
// [1] => 2
// [4] => 3
// [3] => 17
// [0] => 23
// [2] => 89
// )
// Array
// (
// [1] => css
// [0] => html
// [2] => javascript
// [4] => mysql
// [3] => php
// )
echo '<hr>';
// 4. array_multisort($arr1,arr2,...) 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。
// SORT_ASC 按照上升顺序排序, SORT_DESC 按照下降顺序排序
// 排序多个数组
$arr5 = [1,2,3,4,5];
$arr6 = [5,4,3,2,1];
array_multisort($arr5,SORT_DESC,$arr6,SORT_ASC);
print_r($arr5); // Array ( [0] => 5 [1] => 4 [2] => 3 [3] => 2 [4] => 1 )
print_r($arr6); // Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
echo '<hr>';
// 多维数组排序,以二维数组为例
$arr7 = [
['name'=>'peter','age'=>21],
['name'=>'jack','age'=>30],
['name'=>'tom','age'=>32],
['name'=>'marry','age'=>28]
];
foreach ($arr7 as $key=>$value) {
$name[$key] = $value['name'];
$age[$key] = $value['age'];
}
array_multisort($name,SORT_ASC,$age,SORT_ASC,$arr7);
echo '<pre>';
print_r($name);
print_r($age);
print_r($arr7);
echo '</pre>';
?>
二,用数组实现数据结构中的堆栈操作与队列操作
<?php
// 1. 用数组实现堆栈操作:array_push和array_pop
// array_push — 将一个或多个单元压入数组的末尾(入栈)
// 返回处理之后数组的元素个数。
// Note: 如果用 array_push() 来给数组增加一个单元,还不如用 $array[] = ,因为这样没有调用函数的额外负担。
// Note: 如果第一个参数不是数组,array_push() 将发出一条警告。这和 $var[] 的行为不同,后者会新建一个数组。
// array_pop — 弹出数组最后一个单元(出栈),
// 返回 array 的最后一个值。如果 array 是空(如果不是一个数组),将会返回 NULL 。
$arr = ['name'=>'张三','age'=>33];
array_push($arr,'广州','上海'); // 入栈的元素,总是数字索引
echo '<pre>';
print_r($arr);
echo '</pre>';
// Array
// (
// [name] => 张三
// [age] => 33
// [0] => 广州
// [1] => 上海
// )
echo array_pop($arr); // 出栈的元素 上海
echo '<pre>';
print_r($arr);
echo '</pre>';
// Array
// (
// [name] => 张三
// [age] => 33
// [0] => 广州
// )
// 2. 用数组实现队列操作:array_shift()和array_unshift()
// array_unshift — 在数组开头插入一个或多个单元 ,返回 array 数组新的单元数目。
// array_shift — 将数组开头的单元移出数组,返回移出的值,如果 array 为 空或不是一个数组则返回 NULL。
$arr1 = [
['name'=>'peter','age'=>21],
['name'=>'jack','age'=>30],
['name'=>'tom','age'=>32],
['name'=>'marry','age'=>28]
];
echo '出队的元素:';
print_r(array_shift($arr1)); // 出队的元素:Array ( [name] => peter [age] => 21 )
echo '<pre>';
print_r($arr1);
echo '</pre>';
// Array
// (
// [0] => Array
// (
// [name] => jack
// [age] => 30
// )
// [1] => Array
// (
// [name] => tom
// [age] => 32
// )
// [2] => Array
// (
// [name] => marry
// [age] => 28
// )
// )
array_unshift($arr1,'test');
echo '<pre>';
print_r($arr1);
echo '</pre>';
// Array
// (
// [0] => test
// [1] => Array
// (
// [name] => jack
// [age] => 30
// )
// [2] => Array
// (
// [name] => tom
// [age] => 32
// )
// [3] => Array
// (
// [name] => marry
// [age] => 28
// )
// )
?>
三、其他数组函数
<?php
// 1. mixed array_rand ( array $array [, int $num = 1 ] )
// 从数组中取出一个或多个随机的单元,并返回随机条目的一个或多个键。 它使用了伪随机数产生算法,所以不适合密码学场景,
// array 输入的数组。
// num 指明了你想取出多少个单元。
$arr = ['html','css','javascript','php','mysql'];
var_dump(array_rand($arr)); // int(2)
echo '<br>';
print_r(array_rand($arr,2)); // Array ( [0] => 0 [1] => 3 )
// 2.bool shuffle ( array &$array )
// 本函数打乱(随机排列单元的顺序)一个数组。 它使用的是伪随机数产生器,并不适合密码学的场合。
shuffle($arr);
print_r($arr); // Array ( [0] => php [1] => mysql [2] => html [3] => javascript [4] => css )
// 3. number array_sum ( array $array )
// array_sum() 将数组中的所有值相加,并返回结果。
$arr1 = [23,2,89,17,3];
echo '数组的累加值:',array_sum($arr1); // 134
// 4. array range ( mixed $start , mixed $end [, number $step = 1 ] )
// 建立一个包含指定范围单元的数组。
$arr2 = range(1,10,1);
print_r($arr2);
// Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 10 )
$arr2 = range(1,10,2);
print_r($arr2);
// Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 7 [4] => 9 )
?>