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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章