第5章數組數組
學習要點:app
1.什麼是數組函數
2.自定義鍵數組學習
3.數組裏的數組測試
4.數組的排序spa
6.統計數組個數排序
傳統上把數組(array)定義爲一組有某種共同特性的元素,包括類似性和類型。每一個元素由一個特殊的標識符來區分,稱之爲鍵(key);而每一個鍵對應一個值(value)。ip
李彥宏 |
周鴻禕 |
馬雲 |
俞敏洪 |
李開復 |
吳祁 |
依照上表,咱們建立一個數組。
第一種:
$userNames=array('李彥宏','周鴻禕','馬雲','俞敏洪','李開復','吳祁');
這是索引數組初始化:
數字索引的初始值是從0開始計算的:
userNames[0]---userNames[5],表明這6我的的名字。
第二種:
經過range()函數自動建立一個數組
$numbers=range(1,10) $letters=range('a','z')
能夠加第三個參數$numbers=range(1,10,2),第三個參數表示步長
訪問數組的內容:
要訪問一個變量的內容,能夠直接使用其名稱。若是該變量是一個數組,能夠使用變量名稱和關鍵字或索引的組合來訪問其內容。
$numbers[0]、$numbers[1]、$numbers[2];等。
改變數組的值:
$numbers[0]="Lee";
使用循環訪問數組
因爲數組使用有序的數字做爲索引,因此使用一個for循環就能夠很容易地顯示數組的內容:
for ($i=0;$i<10;$i++) {
echo $numbers[$i];
}
也能夠使用foreach循環來遍歷數組:
foreach ($numbers as $value) {
echo $value;
}
測試是否爲數組變量:is_array();
print_r 函數:打印關於變量的易於理解的信息
初始化相關數組
$ages=array('吳祁'=>19,'李炎恢'=>27,'胡心鵬'=>23);
訪問數組元素
$ages["吳祁"];
$ages["李炎恢"];
$ages["胡心鵬"];
追加數組:首先,建立只有一個元素的數組,而後追加兩個元素。
$ages=array("吳祁"=>19);
$ages["李炎恢"]=27;
$ages["胡心鵬"]=23;
直接添加數組:無需建立,直接添加,添加第一個元素自動創建數組。
$ages["吳祁"]=19;
$ages["李炎恢"]=27;
$ages["胡心鵬"]=23;
使用循環語句:由於相關數組的索引不是數字,所以沒法使用for循環語句中使用一個簡單的計數器對數組進行操做。可是能夠使用foreach循環或list()和each()結構。
foreach ($ages as $key=>$value) {
echo $key."=>".$value."<br />";
}
使用each()結構打印$ages數組的內容:each()函數返回數組的當前元素,並將下一個元素做爲當前元素。
while (!!$element=each($ages)) {
echo $element["key"];
echo "=>";
echo $element["value"];
echo "<br />";
}
使用list()函數,能夠用來將一個數組分解爲一系列的值。能夠按照以下方式將函數each()返回的兩個值分開:
list($name,$age)=each($ages);
當使用each()函數時,數組將記錄當前元素。若是但願在相同的腳本中兩次使用該數組,就必須使用函數reset()將當前元素從新設置到數組開始處。
reset($prices);
肯定惟一的數組元素:array_unique();它會刪除掉裏面相同值的元素。
置換數組鍵和值:array_flip();它會對調數組中的key和value;
數組不必定就是一個關鍵字和值的簡單列表----數組中的每一個位置用來保存另外一個數組。使用這種方法,能夠建立一個二維數組。能夠把二維數組當成一個矩陣,或者是一個具備寬度和高度或者行和列的網格。
二維表
產品名 |
數量 |
價格 |
蘋果 |
6 |
28.8 |
豬肉 |
2 |
32.1 |
餅乾 |
3 |
45.3 |
$products=array(
array("蘋果",6,28.8),
array("豬肉",2,32.1),
array("餅乾",3,45.3)
);
顯示這個二維數組:
echo "|".$products[0][0]."|".$products[0][1]."|".$products[0][2]."|<br />";
echo "|".$products[1][0]."|".$products[1][1]."|".$products[1][2]."|<br />";
echo "|".$products[2][0]."|".$products[2][1]."|".$products[2][2]."|<br />";
此外,還能夠使用雙重for循環來實現一樣的效果:
for ($row=0;$row<3;$row++) {
for ($column=0;$column<3;$column++) {
echo "|".$products[$row][$column];
}
echo "|<br />";
}
使用列明的二維數組:
$products=array(
array("產品名"=>"蘋果","數量"=>6,"價格"=>28.8),
array("產品名"=>"豬肉","數量"=>2,"價格"=>32.1),
array("產品名"=>"餅乾","數量"=>3,"價格"=>45.3)
);
顯示這個二維數組:
第一種方式:
for ($row=0;$row<3;$row++) {
echo "|".$products[$row]["產品名"]."|".
$products[$row]["數量"]."|".$products[$row]["價格"]."|<br />";
}
第二種方式:
for ($row=0;$row<3;$row++) {
while (!!list($key, $value)=each($products[$row])) {
echo "|".$value;
}
echo "|<br />";
}
對保存在數組中的相關數據進行排序是一件很是有意義的事情。使用而且排序一個一維數組是很是簡單的。
使用sort()函數將數組按字母升序進行排序。
$products=array("orange","banner","apple");
sort($products);
使用sort()函數將數字升序進行排序。
$prices=array(100,10,4,23,78);
sort($prices);
sort()函數的第二個參數是可選的。這個可選參數能夠傳遞SORT_REGULAR(默認值)、SORT_NUMERIC或SORT_STRING。指定排序類型的功能是很是有用的。好比,當要比較可能包含有數字2和12的字符串時,從數字角度看,2要小於12,可是做爲字符串,"12"卻要小於"2"。
使用asort()函數和ksort()函數對相關數組排序
建立一個包括3個產品及價格的數組,而後將它們按價格的升序進行排序:
$prices=array("c"=>蘋果,"a"=>豬肉,"b"=>餅乾);
asort($prices);
按說明排序使用ksort()函數
ksort($prices)
反向排序:sort()、asort()和ksort()都是正向排序,固然也有相對應的反向排序.
實現反向:rsort()、arsort()和krsort()。
在一些應用程序中,可能但願按另外一種方式對數組排序。函數shuffle()將數組個元素進行隨機排序。函數array_reverse()給出一個原來數組的反向排序。
shuffle($pictures);
array_reverse($pictures);
array_unshift()函數將新元素添加到數組頭,array_push()函數將每一個新元素添加到數組的末尾。
array_shift()刪除數組頭第一個元素,與其相反的函數是array_pop(),刪除並返回數組末尾的一個元素。
array_rand()返回數組中的一個或多個鍵。
在數組中瀏覽:each()、current()、reset()、end()、next()、pos()、prev();
調用next()或each()將使指針前移一個元素。調用each($array_name)會在指針前移一個位置以前返回當前元素。next()函數則有些不一樣----調用next($array_name)是將指針前移,而後再返回新的當前元素。
要反向遍歷一個數組,能夠使用end()和prev()函數。prev()函數和next()函數相反。它是將當前指針往回移一個位置而後再返回新的當前元素。
count()和sizeof()統計數組下標的個數
array_count_values()統計數組內下標值的個數
對於一個非數字索引數組,而該數組又有許多關鍵字-值對,能夠使用函數extract()將它們轉換成一系列的標量變量。extract()函數原型以下:
extract(array var_array,[int extract_type],[string prefix]);
函數extract()的做用是經過一個數組建立一系列的標量變量,這些變量的名稱必須是數組中關鍵字的名稱,而變量值則是數組中的值。
$array=array("key1"=>"value1","key2"=>"value2","key3"=>"value3");
extract($array);
echo $key1.$key2.$key3;