PHP網(wǎng)站制作數(shù)組其他操作前面已經(jīng)提到,每個數(shù)組都有一個內(nèi)部指針指向數(shù)組中的當(dāng)前元素。當(dāng)使用函數(shù)each()時,就間接地使用了這個指針,但是也可以直接使用和操作這個指針。深圳網(wǎng)站制作公司認(rèn)為如果創(chuàng)建一個新數(shù)組,那么當(dāng)前指針就將被初始化,并指向數(shù)組的第一個元素。調(diào)用current($array_name)將返回第一個元素。調(diào)用next()或each()將使指針前移一個元素。調(diào)用each($array_name)會在指針前移一個位置之前返回當(dāng)前元素。next()函數(shù)則有些不同,調(diào)用next($array_name)是將指針前移,然后再返回新的當(dāng)前元素。使用reset()函數(shù)將返回指向數(shù)組第一個元素的指針。類似地,調(diào)用end($array_name)可以將指針移到數(shù)組末尾。reset()和end()可以分別返回數(shù)組的第一個元素和最后一個元素。要反向遍歷一個數(shù)組,可以使用end()和prev()函數(shù)。prev()函數(shù)和next()函數(shù)相反,它是將當(dāng)前指針往回移一個位置然后再返回新的當(dāng)前元素。
【示例1】如下所示的代碼將反向顯示一個數(shù)組的內(nèi)容。
如果$array數(shù)組的聲明如下:
$array=array(1,2,3);
在這個例子中,瀏覽器中的輸出結(jié)果就會是:3、2、1。使用each()、current()、reset()、end()、next()、pos()和prev(),可以編寫出自己的、能按任何順序瀏覽數(shù)組的代碼。有時候,讀者可能希望以相同方式使用或者修改數(shù)組中的每一個元素。array_walk()函數(shù)允許進行這樣的操作。函數(shù)array_walk()的原型如下:
intarray_walk(arrayarr,stringfunc,[mixeduserdata])
其調(diào)用方法類似于usort()函數(shù)的調(diào)用,array_walk()函數(shù)需要3個參數(shù)。第一個是arr,也就是需要處理的數(shù)組。第二個是func,也就是用戶自定義并將作用于數(shù)組中每個元素的函數(shù)。第三個參數(shù)userdata是可選的,如果使用它,它可以作為一個參數(shù)傳遞給自己的函數(shù)。
【示例2】這個用戶自定義函數(shù)是一個以指定格式顯示各個元素的函數(shù)。如下所示的代碼通過在$array數(shù)組的每個元素中調(diào)用用戶自定義的my_print()函數(shù),從而將每個元素顯示在一個新行中。
對于數(shù)組中的每個元素,array_walk將以關(guān)鍵字和保存在數(shù)組中的值為參數(shù),此外,還可以以任何數(shù)據(jù)作為該函數(shù)的userdata參數(shù)??梢园慈缦路绞秸{(diào)用函數(shù):Yourfunction(value,key,userdata)
在大多數(shù)情況下,函數(shù)只能處理數(shù)組中的值。但是,在某些情況下,可能還需要使用userdata參數(shù)向函數(shù)傳遞一個參數(shù)。在少數(shù)情況下,可能還需要對數(shù)組關(guān)鍵字和值進行處理。在MyPrint()函數(shù)中,可以忽略關(guān)鍵字參數(shù)和userdata參數(shù)。
【示例3】編寫一個帶有一個參數(shù)的函數(shù),這個函數(shù)可以用來修改數(shù)組的值。
在上面代碼中定義了一個名為my_multiply()的函數(shù),它可以用所提供的乘法因子去乘以數(shù)組中的每個元素。需要使用array_walk()函數(shù)的第三個參數(shù)來傳遞這個乘法因子。因為需要這個參數(shù),所以在定義my_multiply()函數(shù)時必須帶有3個參數(shù)——一個數(shù)組元素值($value)、一個數(shù)組元素的關(guān)鍵字($key)和參數(shù)($factor)??梢赃x擇忽略這個關(guān)鍵字。此外,還有一個需要注意的問題是傳遞參數(shù)$value的方式。在my_multiply()的函數(shù)定義中,變量前面的地址符(&)意味著$value是按引用方式傳遞的。按引用方式傳遞允許函數(shù)修改數(shù)組的內(nèi)容。函數(shù)sizeof()可以返回數(shù)組元素的個數(shù)??梢缘玫揭粋€常規(guī)標(biāo)量變量中的元素個數(shù),如果傳遞給這個函數(shù)的數(shù)組是一個空數(shù)組,或者是一個沒有經(jīng)過設(shè)定的變量,返回的數(shù)組元素個數(shù)就是0。函數(shù)array_count_values()更加復(fù)雜一些。如果調(diào)用array_count_values($array),這個函數(shù)將會統(tǒng)計每個特定的值在數(shù)組$array中出現(xiàn)過的次數(shù)(這就是數(shù)組的基數(shù)集)。這個函數(shù)將返回一個包含頻率表的相關(guān)數(shù)組。這個數(shù)組包含數(shù)組$array中的所有值,并以這些值作為相關(guān)數(shù)組的關(guān)鍵字。每個關(guān)鍵字所對應(yīng)的數(shù)值就是關(guān)鍵字在數(shù)組$array中出現(xiàn)的次數(shù)。
【示例4】創(chuàng)建數(shù)組。
$array=array(4,5,1,2,3,1,2,1);
$ac=array_count_values($array);
將創(chuàng)建一個名為$ac的數(shù)組,該數(shù)組包括:
其結(jié)果表示數(shù)值4、5、3在數(shù)組$array中只出現(xiàn)一次,1出現(xiàn)了3次,2出現(xiàn)了兩次。對于一個非數(shù)字索引數(shù)組,該數(shù)組會有許多關(guān)鍵字:名值對,可以使用函數(shù)extract()將它們轉(zhuǎn)換成一系列的標(biāo)量變量。extract()的函數(shù)原型如下:extract(arrayvar_array[,intextract_type][,stringprefix]);
【示例5】函數(shù)extract()的作用是通過一個數(shù)組創(chuàng)建一系列的標(biāo)量變量,這些變量的名稱必須是數(shù)組中關(guān)鍵字的名稱,而變量值則是數(shù)組中的值。$array=array("key1"=>"value1","key2"=>"value2","key3"=>"value3");
extract($array);
echo"$key1$key2$key3";
這段代碼的輸出如下:
value1value2value3
這個數(shù)組具有3個元素,它們的關(guān)鍵字分別是key1、key2和key3。使用函數(shù)extract(),可以創(chuàng)建3個標(biāo)量變量$key1、$key2和$key3。從輸出結(jié)果中,可以看到$key1、$key2和$key3的值分別為“value1”、“value2”和“value3”。這些值都來自原來的數(shù)組。extract()函數(shù)具有兩個可選參數(shù):extract_type和prefix。變量extract_type將告訴extract()函數(shù)如何處理沖突。有時可能已經(jīng)存在了一個和數(shù)組關(guān)鍵字同名的變量,該函數(shù)的默認(rèn)操作是覆蓋已有的變量。好了,網(wǎng)站制作公司本文關(guān)于“PHP網(wǎng)站制作怎樣處理其他數(shù)組實操經(jīng)驗分享”就到這里,謝謝關(guān)注,博納網(wǎng)絡(luò)編輯整理。