什麼是數組?
數組是一個資料的集合,相當於一個容器,可以將資料按一定的規則存到這個容器中。相當於旅館,旅館內有很多房間,而房間按照一定的規則編號。
數組的構成:基本結構形式如下:
$數組名 (鍵)= 值 數組名:是一個數組區別於另一個數組的方式,就像每個旅館都有一個名字。
鍵(key):也成為指標、索引或者標識符。鍵代表某值在數組中存放的位置,相當於旅館的門牌號,可以用不同方式命名。通過查詢鍵可以找到相應的值。
值(value):值相當於房間記憶體放的東西。
賦值建立數組
在php中,建立數組有變數賦值和調用函數兩種方法,這裡先講前者。
使用變數賦值方法很簡單,直接給一個陣列變數賦值即可。
執行個體:
| 代碼如下 |
複製代碼 |
<?php $lang[]="php"; $lang[]="html"; $lang[]="css"; echo "$lang[0] <br>"; echo "$lang[1] <br>"; echo "$lang[2] <br>"; ?> |
三個指派陳述式產生的數組內容:
0=>php
1=>html
2=>css
建立數組
除了上面介紹的賦值建立數組,還有調用函數的方法建立數組。
php提供了array函數來穿件一個數組,基本結構形式如下:
array (item1,item2... ,itemn)
/* item表示數組中的元素值。array()函數建立數組時自動給元素值分配標識符,從0依次增加 */
執行個體:
| 代碼如下 |
複製代碼 |
<?php $student=array("Tom","Jacky","Rose"); echo $student[0] ."t"; echo $student[1] ."t"; echo $student[2]; ?> |
數組鍵名
1、鍵名分配
在用array()函數建立數組時,鍵名會自動分配到各個值。另外,我們也可以按自己的需要直接給元素分配鍵名。
基本結構形式:
array ( key => item )
執行個體1:
| 代碼如下 |
複製代碼 |
<?php $a=array(1 => "you",2 =>"are ", 5 =>"how "); echo $a[5]; echo $a[2]; echo $a[1]; ?> |
2、用字串作鍵名
不但可以用整數作為鍵名,也可以使用字串作為鍵名。使用字串作為鍵名的數組成為字串索引(string-indexed)數組。
執行個體2:
| 代碼如下 |
複製代碼 |
<?php $a=array("php"=>"動態網頁","html"=>"靜態網頁","css"=>"網頁排版"); echo $a["php"] ."<br>"; echo $a["html"] ."<br>"; echo $a["css"]; ?>
|
3、鍵名的修改
執行個體3:
| 代碼如下 |
複製代碼 |
<?php $arr = array("a" => "新浪", "b"=>"網易", "c" => "騰訊", "雅虎" ); $arr[a] = "PHP中文社區"; $arr['e'] = "新浪"; $arr[] = "百度"; echo $arr['a'] ."<br>"; echo $arr['b'] ."<br>"; echo $arr['c'] ."<br>"; echo $arr['e'] ."<br>"; echo $arr[0] ."<br>"; echo $arr[1] ."<br>"; ?> |
建立多維陣列
在php程式編寫時,一維數組有時不能滿足需求,這時就要用到多維陣列。多維陣列就是在一維數組的基礎上再增加一個或多個細下標,用法與一維數組大致相同,只是多維資料操作更為複雜,不過功能更強大。
以二維數組為例,就像大房子裡面套有小房子,表示方法為$a[0][0]。
執行個體:
| 代碼如下 |
複製代碼 |
<?php $a[0][0]=1; $a[0][1]=2; $a[0][2]=3; $a[1][0]=4; $a[1][1]=5; $a[1][2]=6; for($i=0;$i<=1;$i++){ for($j=0;$j<=2;$j++){ echo "$a[$i][$j]=" .$a[$i][$j] ."<br>"; /* "$"表示輸出變數符號$ */ } } ?> |
輸出數組
輸出數組是指將數組的的所有元素資料顯示在瀏覽器上,php怎麼輸出數組?常用的php輸出數組函數有var_dump()和print_r()函數。
1、var_dump函數遞迴展開數組元素,顯示數組各元素的類型、鍵名和元素值。
執行個體1:
| 代碼如下 |
複製代碼 |
<?php $a=array(0,5,array("php","html","css")); /* 建立一個嵌套的數組 */ var_dump($a); ?>
|
2、print_r函數值顯示數組元素的鍵名和元素值。
執行個體2:
| 代碼如下 |
複製代碼 |
<?php $b=array(1,2,3); print_r($b); ?>
|
測試數組
有時候我們不清楚某個變數是不是數組,可以用is_array()函數來測試判斷。
基本結構形式:
is_array ( 變 量 )
檢測變數是否數組,如果是則返回true,否則返回false。
執行個體:
| 代碼如下 |
複製代碼 |
<?php $a="apple iphone"; if(is_array($a)){ var_dump($a); } else echo "不是數組"; ?> |
foreach遍曆數組
我們在運用數組時,常常要遍曆數組並獲得各個鍵或者元素值,php提供了一些專門遍曆數組的函數。這裡先介紹foreach遍曆數組函數的用法。
結構形式:
| 代碼如下 |
複製代碼 |
foreach ( array_expression as $value ) statement /* array_expression是要遍曆的數組 as作用是將數組的值賦給$value statement是後續語句 */ 執行個體1:
<?php $color=array('white' => '白色' , 'black' => '黑色' , 'red' => '紅色' , 'green' => '綠色', 'yellow' => '黃色'); foreach( $color as $c) echo $c ."<br>"; ?> |
通過foreach不僅可以獲得元素的值也可以獲得鍵名,結構形式:
foreach ( array_expression as $key => $value ) statement
將以上執行個體中第7行的代碼:
| 代碼如下 |
複製代碼 |
foreach( $color as $c) echo $c ."<br>"; 改為: foreach( $color as $key => $c) echo $key.$c ."<br>";
|
尋找數組元素值
php擷取數組鍵名可以用array_search()來實現,結構形式如下:
array_search( $needle,$haystack )
/* 參數$needle表示要尋找的值 */
/* $haystack表示尋找對象 */
array_search()函數返回的是鍵名,而不是布爾值,找不到時返回false。找到的元素如果正好是第一個元素,則返回0。而php會自動轉化成false,所以需要使用”===”判斷傳回值。(“===”判斷是否全等,詳:php關係運算子)
執行個體:
| 代碼如下 |
複製代碼 |
<?php $s=array("a","b","c","d","e","f"); $i=array_search("a",$s); /* 尋找數組是否有字元"a" */ if($i===false) /* 判斷尋找結果 */ echo "在數組s中找不到字元'a'"; else echo "輸出數組$s的鍵名:" .$i; /* 輸出鍵名 */ ?> |
計算數組元素個數
數組也像變數一樣可以進行運算,例如需要php統計數組元素個數時,我們可以利用count()函數來計算數組中元素的個數。
結構形式:
| 代碼如下 |
複製代碼 |
count ( $var,$mode ) /* $var參數$var通常是一個數組,函數返回var中的單元數目 */ /* mode是選擇性參數 */ 執行個體:
<?php $a=array("peple","man","women"); $b=count($a); /* 統計數組元素個數 */ echo $b; ?> |
數組排序
php提供了一系列的數組排序函數,我們可以根據需要對數組進行排序。數組的排序主要有三種方式:
按索引值排序
即按標識符ASCⅡ碼值的大小排列順序。
ksort(): 按照數群組識別碼順序排列
krsort(): 按照數群組識別碼逆序排
執行個體1:
| 代碼如下 |
複製代碼 |
<?php $languages=array( 'c'=>'php', 'd'=>'asp', 'a'=>'jsp', 'b'=>'java' ); krsort($languages); foreach($languages as $key=>$val){ echo "$key = $val".'<br>'; }; ?>
|
按元素值排序
asort(): 按照由小到大的順序對數組排序;
rsort(): 按照由大到小的順序對數組逆序排序。
將執行個體1的8-11行代碼改為:
| 代碼如下 |
複製代碼 |
asort($languages); print_r($languages); echo "<br>"; rsort($languages); print_r($languages);
|
刪除原有鍵名排序
sort(): 按照由小到大的順序對數組排序;
rsort(): 按照由大到小的順序對數組逆序排序。
將執行個體2的8-11行代碼改為:
| 代碼如下 |
複製代碼 |
sort($languages); foreach($languages as $key=>$val){ echo "languages[$key] = $val".'<br>'; }; |
數組運算子
合并數組計算執行個體:
| 代碼如下 |
複製代碼 |
<?php $a=array( 'a'=>'php', 'b'=>'html', 'c'=>'css' ); $b=array( 'a'=>'asp', 'b'=>'jsp' ); $c=$a+$b; /* 合并數組 */ var_dump($c); echo "<br>"; $c=$b+$a; /* 調換順序合并數組 */ var_dump($c); ?>
|
數組的比較執行個體:
| 代碼如下 |
複製代碼 |
<?php $a=array('php','asp'); $b=array(1=>'asp',0=>'php'); var_dump($a==$b); var_dump($a===$b); ?>
|
數組運算子
| 例子 |
名稱 |
結果 |
| $a + $b |
聯合 |
$a 和 $b 的聯合。 |
| $a == $b |
相等 |
如果 $a 和 $b 具有相同的鍵/值對則為 TRUE。 |
| $a === $b |
全等 |
如果 $a 和 $b 具有相同的鍵/值對並且順序和類型都相同則為 TRUE。 |
| $a != $b |
不等 |
如果 $a 不等於 $b 則為 TRUE。 |
| $a <> $b |
不等 |
如果 $a 不等於 $b 則為 TRUE。 |
| $a !== $b |
不全等 |
如果 $a 不全等於 $b 則為 TRUE。 |