PHP学习——18 PHP数组(数组的排序操作、堆栈操作与队列操作、数组常用函数)

一,数组的排序操作

<?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 )
?>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值