PHP基礎回顧(三) 陣列的使用

2021-06-22 07:30:36 字數 4047 閱讀 4925

(1)就像echo語句一樣,array()實際上是乙個語言結構,而不是乙個函式。

(2)如果需要將公升序排列的數字儲存在乙個陣列中,可以使用rang()函式自動建立這個陣列。

rang()函式還有乙個可選的第三引數,這個引數允許設定值之間的步幅。例如,如需建立乙個1~10之間的奇數陣列:rang(1, 10 , 2)

rang()函式也可以對字元進行操作,如 rang( 'a' , 'z' )

(3)就像php的其他變數一樣,陣列不需要預先初始化或建立。在第一次使用它們的時候,它們會自動建立。所以,當要為陣列新增新的元素,直接賦值給陣列的最後乙個元素。

(4)因為關聯陣列的索引不是數字,因此無法再for迴圈語句中使用乙個簡單的計數器對陣列進行操作。但是可以使用foreach() 或 list() 和 each()結構。

假設陣列為

$prices = array('tires' => 100 , 'oil' => 10 , 'spark plugs' => 4);

foreach($prices  as $key => $value)
each()函式返回陣列的當前元素,並將下乙個元素作為當前元素。

while($element = each($prices))

當呼叫each()時,它將返回乙個帶有4個數值和4個指向陣列位置的索引的陣列。位置key和0包含了當前元素的關鍵字,而位置value和1包含了當前元素的值。

函式list() 可以用來將乙個陣列分解為乙個系列的值。

while( list($product, $price) = each($prices) )
使用list()將從each()返回的陣列中所包含0、1兩個元素變為兩個名為$product和$price的新變數。

注意,當使用 each() 函式時,陣列將記錄當前元素。如果希望在相同的指令碼中兩次使用該陣列,就必須使用函式 reset() 將當前元素重新設定到陣列開始處。再次遍歷陣列,可以使用如下所示的**:

reset($prices);

while(list($product, $price) = each($prices))

(5) 陣列操作符

$a + $b  聯合  陣列$b將被附加到$a中,但是任何關鍵字衝突的元素將不會被新增,如果$b中的元素與$a中的一些元素具有相同索引,它們將不會被新增,即$a中的元素將不會被覆蓋。

$a == $b 等價 如果$a 和 $b 包含相同的元素,返回true

$a === $b 恒等 如果$a 和 $b包含相同順序和型別的元素,返回true。

(6)陣列排序

使用 sort(  ) 函式將陣列按字母公升序進行排序,還可以按數字順序進行排序。sort()函式是區分大小寫的。所有大寫字母都在小寫字母的前面。

該函式的第二個引數是可選的,這個可選引數可以傳遞sort_regular(預設值)、sort_numeric 或 sort_string。 指定排序型別的功能是非常有用的,例如,當要比較可能包含有數字2和12的字串時,從數字的角度看,2要小於12,但是作為字串,『12』卻要小於『2』。

使用asort( ) 函式和 ksort()函式對關聯陣列排序。

函式 asort() 根據陣列的每個元素值進行排序。

函式 ksort() 根據陣列關鍵字排序而不是按值排序。

反向排序函式與排序函式的用法相同。

函式 rsort() 將乙個一維數字索引陣列按降序排序。

函式 arsort() 將乙個一維關聯陣列按每個元素值得降序排序。

函式 krsort() 根據陣列元素的關鍵字將一維陣列按照降序排序。

(7)多維陣列的排序

假設多維陣列如下:

$products = array ( 

array('tir' , 'tires' , 100),

array('oil' , 'oil' , 10),

array('spk' , 'spark plugs' , 4)

);

如果是按產品的說明按字母排序,或者對**大小排序,需要用函式usort() 告訴php如何比較各個元素,要實現此功能,需要編寫自己的比較函式。

如下所示的**對訂單陣列中的第二列(說明),按字母進行排序:

function compare($x , $y) else if($x[1] < $y[1]) else 

}usort($products , 'compare');

在這個例子中,$x 和 $y 將是主陣列中的兩個子陣列。

usort 中的「u」代表「user」,因為這個函式要求傳入使用者定義的比較函式。asort 和 ksort對應的版本 uasort() 和 uksort() 也要傳入使用者定義的比較函式。

使用者定義的排序沒有反向變體,但可以對乙個多維陣列進行反向排序。由於使用者應該提供比較函式,因此可以編寫乙個能夠返回相反值得比較函式。

function reverse_compare($x , $y) else if($x[2] < $y[2])else

}usort($products, 'reverse_compare');

( 8 ) 對陣列進行重新排序

函式 shuffle() 將陣列各元素進行隨機排序。可以應用在電子商務隨機顯示商品的例子上。

函式 array_reverse() 給出乙個原來陣列的反向排序。該函式返回乙個原始陣列修改後的副本,並不會修改原來的陣列。

建立乙個從10 到 1 的陣列有多種方法:

1、 range(10 , 1 , -1)

2、 $number = range(1,10);

$number = array_reverse( $number );

3、 $number = range(1 , 10);

rsort( $number );

4、 $number = array();

for( $i = 10; $i >0 :  $i--)

array_walk(&$array,'my_multiply',3);這個函式可以用來修改陣列的值。請注意,雖然對關鍵字並不感興趣,但為了接收第三個引數變數,還是必須接收它。

在my_multiply()函式定義中,變數前面的位址符&意味著$value是按引用方式傳遞的。按引用方式傳遞允許函式修改陣列的內容。

(14)統計陣列元素個數:count()、sizeof()和array_count_value()

如果呼叫array_count_values($array),這個函式將會統計每個特定的值在陣列$array中出現過的次數(這就是陣列的基數集)。這個函式將返回乙個包含頻率表的關聯陣列。這個陣列包含陣列$array中的所有值,並以這些值作為關聯陣列的關鍵字。每個關鍵字所對應的數值就死關鍵字在陣列$array中出現的次數。

例如,如下**

$array = array(4,5,1,2,3,1,2,1);

$ac = array_count_values($array);

將建立乙個名為$ac的陣列,該陣列包括:

關鍵字                    值

4                              1

5                              1

1                              3

2                              2

3                              1

(15)將陣列轉換成標量變數:extract()

對於乙個非數字索引陣列,而該陣列又有許多關鍵字-值對,可以使用函式extract()將它們轉換成一系列的標量變數。extract()的函式原型如下所示:

extract(array var_array [, int extract_type] [, string prefix]);

extract()函式的作用是通過乙個陣列建立一系列的標量變數,這些變數的名稱必須是陣列中關鍵字的名稱,而變數值則是陣列中的值。

PHP基礎回顧

定義陣列 arr array 陣列賦值 arr i v arr array key v 定義鍵值key對應的值為v arr array v1,v2 迴圈訪問陣列 foreach arr as key value 去除兩側 左 右空格 trim ltrim rtrim str 獲取字串長度 strle...

PHP基礎知識回顧

header content type text html charset utf 8 conn mysql connect localhost root 鏈結伺服器 非永久性 if conn else db mysql select db test conn 選擇資料庫 if db else my...

PHP基礎回顧之PHP JSON(六)

json 函式 php 陣列轉換為 json 格式資料 arr array a 1,b 2,c 3,d 4,e 5 echo json encode arr php 物件轉換為 json 格式資料 class emp e new emp e name sachin e hobbies sports ...