數組的聲明
1、直接賦值的方式聲明數組
$陣列變數名[索引值] = 資料內容 //其中索引值(下標)可以是一個字串或數字
但有的時候,我們也可以直接給數組賦值,並不填寫“索引值”,那第此時,數組的下標就會自動以數字0開始增加。
$陣列變數名[] = 資料內容 //其中索引值(下標)可以是一個字串或數字
2、使用array()語言結構建立數組
在實際使用中我們可以用array()語言結構來建立一個數組,並初始化數組。
$陣列變數名=array( key1 => value1, key2 => value2, ...... ,keyN => valueN );
當然,像上面我們並不一定就這樣,我們有的時候會像下面這樣來做:(區別在於索引值為數字)
$陣列變數名=array( value1, value2, ...... , valueN );
3、多維陣列的聲明
多維陣列其實也就是在數組裡面再次存放數組。如下:
$content = array (
array(1,'高某','A公司','北京市'),
array(2,'高某1','B公司','北京市'),
array(3,'高某','C公司','北京市')
);
數組的遍曆
1、使用for語句迴圈遍曆數組
在其它的程式設計語言中,數組的遍曆通常都是使用for迴圈語句,通過數組的下標來訪問數組中每個成員元素,但要求數組的下標必須是連續的數字索引。而在PHP中,不僅可以指定非連續的數字索引值,而且還存在以字元為下標的關聯陣列。所以在PHP中,其實是很少使用for語句來遍曆數組。下面來曬一個例子給大家看一下,大家應該不會陌生。
| 代碼如下 |
複製代碼 |
<?php //使用array()語句將連絡人清單中第一條記錄聲明成一維數組$contact $contact=array(1,"高某","A公司","北京市","(015)9582451","gao@php.com"); //以表格的形式輸出一維數組中的每個元素 echo '<table border="1" width="600" align="center">'; //輸出<table>標記定義表格 echo '<caption><h1>連絡人清單</h1></caption>'; //輸出表頭 echo '<tr bgcolor="#dddddd">'; //輸出表格的行開始,背景為灰色 //以html的th標記輸出表格的欄位名稱 echo '<th>編號</th><th>姓名</th><th>公司</th><th>地址</th><th>電話</th><th>EMAIL</th>'; echo '</tr><tr>'; for($i=0;$i<count($contact);$i++){ //使用for迴圈來輸出一維數組中的元素 echo '<td>'.$contact[$i].'</td>'; } echo '</tr></table>'; //輸出表格的關閉標記 ?> |
遍曆多維陣列時,要使用迴圈嵌套逐層進遍曆。在此就不用代碼列出來了。
2、使用foreach語句遍曆數組
既然for迴圈語句在PHP中並不常用,那麼就讓我們來看一下foreach到底有什麼可取之處吧!
foreach語句有兩種文法格式,第二種比較次要但卻是第一種有用的擴充。
第一種文法格式:
foreach(array_expression as $value ){
迴圈體
}
第二種文法模式:
foreach(array_expression as $key => $value){
迴圈體
}
3、聯合使用list()、each()、和while()、迴圈遍曆數組
each()函數
each()函數需要傳遞一個數組作為參數,返回數組中當前元素的鍵/值對,並向後移動數組指標到下一個元素的位置。鍵/值對被返回為帶有四個元素的關聯和索引混合的數組,鍵名分別為0、1、key和value。其中鍵名0和key對應的值是一樣的,是數組元素的鍵名,1和value則包含有數組元素的值。如果內部指標越過了數組的末端,則each()返回FALSE。each()函數的使用如下所示:
| 代碼如下 |
複製代碼 |
<?php //聲明一個數組$contact作為each()函數的參數 $contact=array("ID"=>1,"姓名"=>"高某","http://www.111cn.Net公司"=>"A公司","地址"=>"北京市"); $id=each($contact); //返回數組$contact中第一個元素的鍵/值對,是帶有4個元素的數組 print_r($id); //返回數組$id:Array([1]=>1[value]=>1[0]=>ID[key]=>ID) $name=each($contact); //返回數組Rcontact中第二個元素的鍵/值對,是帶有4個元素的數組 print_r($name); //返回數組$name:Array([1]=>高某 [value]=>高某 [0]=>姓名 [key]=>姓名) $company=each($contact); print_r($company); $address=each($contact); print_r($address); $no=each($contact); //已經到數組$contact的末端,返回false var_dump($no); //輸出$no的值:bool(false) ?> |
list()函數
這不是真正的函數,而是PHP的語言結構。list()用一步操作給一組變數進賦值,即把數組中的值賦給一些變數。list()僅能用於數字索引的數組並假定數字索引從0開始。文法格式如下所示:
list(mixed varname,mixed ...)=array_expression //list()語句的文法格式
list()語句和其它函數在使用上有很大的區別,並不是直接接收一個數組作為參數。而是通過“=”去處符以賦值的方式,將數組中每個元素的值,對應的賦給list()函數中的每個參數。list()函數又將它中的每個參數轉換為直接可以在指令碼中使用的變數。使用方法如下 :
| 代碼如下 |
複製代碼 |
<?php $info=array('coffee','brown','caffeine'); //聲明一個索引數組$info list($drink,$color,$power)=$info; //將數組中的所有元素轉為變數 echo "$drink is $color and $power makes it special.n";//輸出的三個變數值是數組中三個元素的值 list($drink, ,$power)=$info; //將數組中的部分元素變為變數 echo "$drink has $power.n"; //輸出的兩個變更值是數組中的前兩個元素的值 list(,,$power)=$info; //跳過前兩個變數只將數組中第三個元素的值轉為變數 echo "I need $power!n"; //輸出的一個變數值是數組中桃花汛三個元素的值勤 ?> |
通過上例瞭解list()函數的用法之後,將each()函數和list()函數結合起來使用。代碼如下:
| 代碼如下 |
複製代碼 |
<?php $contact=array("ID"=>1,"姓名"=>"http://www.111Cn.Net","公司"=>"A公司","地址"=>"北京市"); list($key,$value)=each($contact); //將each()函數和list()函數聯合使用 echo "$key=>$value"; //輸出變數$key和$value,中間使用"=>"分隔 ?> |
while()迴圈遍曆數組
while()迴圈的文法格式如下:
while( list($key,$value) = each(array_expressin) ){
迴圈體;
}
使用這種組合改寫前面使用foreach遍曆過的一維數組。代碼如下所示:
| 代碼如下 |
複製代碼 |
<?php //聲明一個一維的關聯陣列$contact $contact=array("ID"=>1, "姓名"=>"高某", "公司"=>"A公司", "地址"=>"北京市", "電話"=>"(010)987665432", "EMAIL"=>"gao@php.com" ); //以HTML列表的方式輸出數組中每個元素的資訊 echo '<dl>一個連絡人資訊:'; while(list($key,$value) = each($contact) ){ //將foreach語句改寫成while,list()和each()的組合 echo "<dd>$key:$value</dd>"; //輸出每個元素的鍵/值勤 } echo '</dl>'; ?> |
4、數組內部指標控制函數遍曆數組
對於數組指標的控制PHP提供了以下幾個內奸函數可以利用。
》》current():是取得目前指標位置的內容資料
》》key():用來讀取目前指標所指向資料的索引值
》》next():將數組中的內部指標移動到下一個單無
》》prev():將數組的內部指標倒回一位
》》end():將數組的內部指標向最後一個元素
》》reset():將目前指標無條件移至第一個索引位置
這些函數的參數都只有一個,就是要操作的數組本身。在下面的樣本中,將使用這些數組指標函數控制數組中元素的讀取順序。代碼如下所示:
| 代碼如下 |
複製代碼 |
<?php //聲明一個一維的關聯陣列$contact,使用"=>"去處符指定了每個元素的字串下標 $contact = array("ID"=>1, "姓名"=>"高某", "公司"=>"A公司", "地址"=>"北京市", "電話"=>"(010)98765432", "EMAIL"=>"gao@php.com" ); //數組剛聲明時,數組指標在數組中第一個元素位置 //使用key()和current()函數傳入數組$contact,返回數組中當前元素的鍵和值 echo '第一個元素:'.key($contact).'=>'.current($contact).'<br>'; //輸出:第一個元素:ID=>1 echo '第一個元素:'.key($contact).'=>'.current($contact).'<br>'; //數組指標沒有移動,輸出同上 next($contact); //將數組$contact中的指標向一個元素移動一次,指向第二個元素的位置 next($contact); //將數組$contact中的指標向一個元素移動一次,指向第三個元素的位置 echo '第三個元素:'.key($contact).'=>'.current($contact).'<br>'; //輸出第三個元素的鍵和值 end($contact); //再將數組$contact中指標移動到最後,指向最後一個元素 echo '最後一個元素:'.key($contact).'=>'.current($contact).'<br>'; //輸出最後一個元素的鍵和值 prev($contact); //將數組$contact中的指標倒回一位,指向最後第二個元素 echo '最後第二個元素:'.key($contact).'=>'.current($contact).'<br>'; //輸出最後第二個元素的鍵和值 reset($contact); //再將數組$contact中的指標重設到第一個元素的位置,指向第一個元素 echo '又回到了第一個元素'.key($contact).'=>'.current($contact).'<br>'; //輸出第一個元素的鍵和值 ?> |
資料排序
•sort() 函數用於對數組單元從低到高進行排序。
•rsort() 函數用於對數組單元從高到低進行排序。
•asort() 函數用於對數組單元從低到高進行排序並保持索引關係。
•arsort() 函數用於對數組單元從高到低進行排序並保持索引關係。
•ksort() 函數用於對數組單元按照鍵名從低到高進行排序。
•krsort() 函數用於對數組單元按照鍵名從高到低進行排序。
例子:
| 代碼如下 |
複製代碼 |
<?php $arr = array("b", "a", "c"); sort($arr); print_r($arr); ?>
|
運行該例子輸出:
Array ( [0] => a [1] => b [2] => c )
在本例中, $arr 數組單元被按照字母順序排序,而數組單元經過排序後,索引值重新分配。
rsort()
PHP rsort() 函數行為與 sort() 相反,對數組單元進行由高到低排序,請參考 sort() 函數使用。
asort()
PHP asort() 函數用於對數組單元從低到高進行排序並保持索引關係,如果成功則返回 TRUE,失敗則返回 FALSE。
文法:
bool asort( array &array [, int sort_flags] )
選擇性參數 sort_flags 用以改變排序的行為,具體參見 sort()。
例子:
| 代碼如下 |
複製代碼 |
<?php $arr = array("b", "a", "c"); asort($arr); print_r($arr); ?>
|
運行該例子輸出:
Array ( [1] => a [0] => b [2] => c )
註:本文內容參考於《細說PHP》中的數組部分,僅作學習之餘的個人筆記。