php ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明...

46
7章陣列與字串 陣列與字串 陣列與字串 陣列與字串 7-1 一維索引陣列 7-2 二維與結合陣列 7-3 陣列的搜尋與排序 7-4 字串處理函數

Upload: others

Post on 21-Oct-2019

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

第第第第7章章章章陣列與字串陣列與字串陣列與字串陣列與字串

� 7-1 一維索引陣列

� 7-2 二維與結合陣列

� 7-3 陣列的搜尋與排序

� 7-4 字串處理函數

Page 2: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-1 一維索引陣列一維索引陣列一維索引陣列一維索引陣列

� 7-1-1 PHP陣列的基礎

� 7-1-2 一維索引陣列

� 7-1-3 foreach迴圈走訪陣列

� 7-1-4 陣列運算子與陣列參數

� 7-1-5 索引陣列的相關函數

� 7-1-6 常數陣列

Page 3: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-1-1 PHP陣列的基礎陣列的基礎陣列的基礎陣列的基礎 –說明說明說明說明

�在PHP陣列儲存的元素是一種對應關係的兩個值:鍵值(Keys)和對應值(Values)。例如:網域名稱對應IP位址;學號對應學生姓名。

� PHP陣列依鍵值的不同,可以分為:

• 索引陣列。

• 結合陣列。

Page 4: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-1-1 PHP陣列的基礎陣列的基礎陣列的基礎陣列的基礎 –

索引陣列索引陣列索引陣列索引陣列((((Indexed Arrays))))

� PHP的索引陣列(Indexed Arrays)是指鍵值預設是從0開始依序增加的正整數,稱為「索引」(Index)。索引陣列是

將相同資料型態的變數集合起來,使用一個名稱代表,然後以索引值存取變數值,如下圖所示:

Page 5: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-1-1 PHP陣列的基礎陣列的基礎陣列的基礎陣列的基礎 –

結合陣列結合陣列結合陣列結合陣列((((Associative Arrays))))

�結合陣列(Associative Arrays)的鍵值是使用者自

訂的值,可以是正整數或字串,每一個鍵值對應一個陣列值,其中鍵值不能重複,但值可以。例如:第6章getdate()函數取得的日期/時間資料就是一個結合陣列,如下所示:

$today = getdate($stamps);

$month = $today["month"];

$day = $today["mday"];

$year = $today["year"];

Page 6: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-1-2 一維索引陣列一維索引陣列一維索引陣列一維索引陣列 -說明說明說明說明

�「一維陣列」(One-dimensional Arrays)是最基

本的陣列結構,只擁有一個索引值,如同現實生活中的單排信箱,可以使用信箱號碼取出指定門牌的信件。

Page 7: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-1-2 一維索引陣列一維索引陣列一維索引陣列一維索引陣列 –

建立索引陣列建立索引陣列建立索引陣列建立索引陣列(方法方法方法方法1)

� PHP陣列並不需要事先宣告,我們可以使用兩種方

式來建立陣列。第一種方式是直接指定陣列元素的值,如下所示:

$names[] = "江小魚";

$names[] = "陳允傑";

$names[] = "楊過";

�上述程式碼並沒有指定索引值,所以,索引值自動從0開始增加,每次加1來建立$names[]陣列。

Page 8: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-1-2 一維索引陣列一維索引陣列一維索引陣列一維索引陣列 –

建立索引陣列建立索引陣列建立索引陣列建立索引陣列(方法方法方法方法2)

�第二種方式是使用array()語言建構子(Language

Construct)建立陣列,這不是函數,而是PHP語言的關鍵字,如下所示:

$grades = array(78, 55, 69, 93);

�上述程式碼建立陣列$grades[]後,使用array()以「,」逗號分隔指定陣列元素值,以此例的陣列共有4個陣列元素,如下圖所示:

Page 9: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-1-2 一維索引陣列一維索引陣列一維索引陣列一維索引陣列 –

存取與走訪陣列元素存取與走訪陣列元素存取與走訪陣列元素存取與走訪陣列元素

� 索引陣列是使用索引值存取陣列元素,索引值從0開始。例如:指定陣列第3個元素的值,如下所示:

$grades[2] = 65;

� PHP程式可以使用相同方法取得陣列元素值,如下所示:

$total += $grades[$i];

� 我們可以使用for迴圈逐次增加索引來走訪整個陣列,就可以顯示陣列中的每一個元素,如下所示:

for ( $i = 0; $i < count($grades); $i++ )

echo "$i=>$grades[$i] ";

Page 10: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-1-2 一維索引陣列一維索引陣列一維索引陣列一維索引陣列 -新增陣列元素新增陣列元素新增陣列元素新增陣列元素

�在PHP陣列只需指定陣列變數值即可新增陣列元素,而不用指定索引值,如下所示:

$names[] = "陳會安";

�上述程式碼並沒有指定索引值,PHP自動增加陣列索引來新增$names[]陣列的元素,以此例索引值是3。

Page 11: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-1-3 foreach迴圈走訪陣列迴圈走訪陣列迴圈走訪陣列迴圈走訪陣列-說明說明說明說明

� PHP提供foreach迴圈來走訪陣列的每一個元素,例如:計算籃球四節得分的總和,如下所示:

foreach ($scores as $element) {

echo "$element ";

$total += $element;

}

�上述foreach迴圈的括號中,在as關鍵字前是走訪

的陣列變數;之後是取得陣列元素值的變數,迴圈依序取出陣列元素,指定給變數$element。

Page 12: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-1-3 foreach迴圈走訪陣列迴圈走訪陣列迴圈走訪陣列迴圈走訪陣列-print_r()函數函數函數函數

� PHP的print_r()函數可以使用讀者可閱讀方式顯示陣列內容,例如:$scores[]陣列,如下所示:

print_r($scores);

Page 13: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-1-4 陣列運算子與陣列參數陣列運算子與陣列參數陣列運算子與陣列參數陣列運算子與陣列參數 -說明說明說明說明

� PHP陣列變數支援指定敘述,可以直接將陣列變數指定成其他陣列變數,如下所示:

$c = $b + $a;

�上述程式碼將陣列運算式指定給陣列變數$c,「+

」符號是PHP陣列運算子,可以執行兩個陣列變數的聯集運算。

Page 14: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-1-4 陣列運算子與陣列參數陣列運算子與陣列參數陣列運算子與陣列參數陣列運算子與陣列參數 –

PHP的陣列運算子的陣列運算子的陣列運算子的陣列運算子

� PHP提供陣列運算子執行聯集和陣列是否相等的比較運算,其說明如下表所示:

運算子運算子運算子運算子 說明說明說明說明 範例範例範例範例

+ 聯集運算,取得第1個運算元的所有元素,再加第2個運算元陣列索引不存在第1個陣列的元素

$a + $b

== 比較兩個陣列元素是否相等,相等傳回true $a == $b

=== 比較兩個陣列元素是否相等,不只元素相等,順序也需相同,相等傳回true

$a === $b

!= 比較兩個陣列元素是否不相等,不相等傳回true $a != $b

<> 比較兩個陣列元素是否不相等,不相等傳回true $a <> $b

!== 比較兩個陣列元素是否不相等,不只元素不相等,順序也不相同時,傳回true

$a !== $b

Page 15: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-1-4 陣列運算子與陣列參數陣列運算子與陣列參數陣列運算子與陣列參數陣列運算子與陣列參數 –

函數的陣列參數函數的陣列參數函數的陣列參數函數的陣列參數(傳值呼叫傳值呼叫傳值呼叫傳值呼叫)

� PHP函數的參數如果是陣列,預設使用傳值呼叫。例如:arrayByValue()函數可以將陣列第1個元素清除為0,如下所示:function arrayByValue($a) {

$a[0] = 0;

return $a;

}

�上述函數是傳值呼叫,所以並不會清除傳入陣列參數的第1個元素。不過,PHP函數可以傳回陣列,換句話說,傳回的陣列變數就會將陣列第1個元素清為0。

Page 16: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-1-4 陣列運算子與陣列參數陣列運算子與陣列參數陣列運算子與陣列參數陣列運算子與陣列參數 –

函數的陣列參數函數的陣列參數函數的陣列參數函數的陣列參數(傳址呼叫傳址呼叫傳址呼叫傳址呼叫)

� PHP函數如果需要更改參數陣列的元素,可以使用傳址呼叫,如下所示:

function arrayByRef(&$a) {

$a[0] = 0;

}

�上述函數就會清除傳入陣列參數的第1個元素。

Page 17: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-1-5 索引陣列的相關函數索引陣列的相關函數索引陣列的相關函數索引陣列的相關函數

函數函數函數函數 說明說明說明說明

array_pad(array, int, value) 將第1個參數的傳值陣列擴充成第2個參數int的尺寸,如果是正值向右擴充;負數是向左,新增的元素值是參數value的值

array_unique(array) 刪除傳址參數陣列中的重複元素

array_splice(array, offset, len,

arr)

刪除第1個傳址參數陣列中指定範圍的元素,offset是位移,如果是正值,從位移開始刪除之後的所有元素;0是全部刪除;負值是刪除倒數幾個元素之後的所有元素。如有len參數表示刪除len個元素。如有arr參數,表示將刪除元素的位置取代成arr陣列

array_reverse(array) 反轉參數的傳值陣列,即第1個元素變成最後1個;最後1個成為第1個

list(var1, var2, ….) 將參數列指定成對應的陣列元素值

Page 18: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-1-6 常數陣列常數陣列常數陣列常數陣列-PHP 5.6版版版版

� 在PHP 5.6版可以使用const關鍵字來建立「常數陣列」(Constant Arrays),這是一個在建立後,就不能再更改元素值的陣列,例如:儲存水果名稱的一維常數陣列,如下所示:const FRUITS = array(

"西瓜",

"草莓",

"蘋果",

"藍莓",

);

print_r(FRUITS);

echo "<br/>";

� 上述程式碼使用const關鍵字建立常數陣列FRUITS後,呼叫print_r()函數顯示水果陣列的每一個元素。

Page 19: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-1-6 常數陣列常數陣列常數陣列常數陣列-PHP 7版版版版

� PHP 7版除了使用const關鍵字,也可以使用define()函數建立常數陣列,如下所示:define("ANIMALS", [

"狗",

"猫",

"猴子",

"鳥",

]);

echo ANIMALS[1];

echo "<br/>";

echo ANIMALS[2];

echo "<br/>";

� 上述程式碼是使用define()函數建立常數陣列,然後使用陣列索引取出第2和第3個元素。

Page 20: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-2 二維與結合陣列二維與結合陣列二維與結合陣列二維與結合陣列

� 7-2-1 建立二維索引陣列

� 7-2-2 結合陣列

� 7-2-3 結合陣列的相關函數

� 7-2-4 函數的可變長度參數列

Page 21: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-2-1 建立二維索引陣列建立二維索引陣列建立二維索引陣列建立二維索引陣列 –說明說明說明說明

�「二維陣列」(Two-dimensional Arrays)是指擁有2個索引的陣列,屬於一種一維陣列的擴充,如

果將一維陣列想像成一度空間的線;二維陣列就是二度空間的平面。

� PHP陣列的元素可以是其他陣列,換句話說,PHP

一樣支援二維陣列或多維陣列。

Page 22: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-2-1 建立二維索引陣列建立二維索引陣列建立二維索引陣列建立二維索引陣列 -建立二維陣列建立二維陣列建立二維陣列建立二維陣列

�在建立二維陣列前,首先建立每一列的一維陣列,接著建立二維陣列,如下所示:

$row0 = array(64, 65);

$row1 = array(77, 81);

$row2 = array(89, 93);

$grades = array($row0, $row1, $row2);

Page 23: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-2-1 建立二維索引陣列建立二維索引陣列建立二維索引陣列建立二維索引陣列 –

存取二維陣列的元素存取二維陣列的元素存取二維陣列的元素存取二維陣列的元素

�在建立二維陣列後,就可以使用2個索引來存取陣列元素值,如下所示:

$grades[1][0] = 56;

�上述程式碼指定二維陣列的元素值,取得元素值也是使用2個索引,如下所示:

$sum += $grades[$j][$i];

�因為二維陣列是2個一維陣列,需要使用二層for

迴圈來走訪陣列元素。事實上,我們只需使用相同方式,就可以將二維陣列擴充成多維陣列。

Page 24: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-2-2 結合陣列結合陣列結合陣列結合陣列 -說明說明說明說明

�「結合陣列」(Associative Arrays)是指陣列元素

儲存的是對應的鍵值和值,其中鍵值不可重複;值可重複。結合陣列各元素的鍵值可以是字串或正整數,我們可以使用鍵值來存取陣列元素。

�簡單的說,結合陣列儲存的是一種擁有對應關係的成對元素,我們可以使用正整數或字串作為鍵值,從鍵值對應到儲存的元素值。

Page 25: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-2-2 結合陣列結合陣列結合陣列結合陣列 -建立結合陣列建立結合陣列建立結合陣列建立結合陣列(方法方法方法方法1)

� PHP結合陣列也不需事先宣告,同樣有兩種方式來建立結合陣列。第一種方式是直接指定陣列變數值,如下所示:$arr["color"] = "紅色";

$arr["name"] = "江小魚";

$arr["shape"] = "圓形";

$arr[] = 50;

�上述程式碼直接指定陣列值,可以看到方括號的索引是字串的鍵值,最後一個沒有指定索引值,PHP自動指定從0開始的正整數(如同索引陣列)。

Page 26: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-2-2 結合陣列結合陣列結合陣列結合陣列 -建立結合陣列建立結合陣列建立結合陣列建立結合陣列(方法方法方法方法2)

�第二種方式是使用array()建立陣列,如下所示:

$arr = array( "color"=>"黑色", "name"=> "陳會安",

"shape"=>"三角形", 100 );

�上述程式碼建立陣列$arr[],使用array()指定陣列元素的值,元素是使用「,」逗號分隔,各元素在「=>」符號前是鍵值;之後是對應值,最後一個沒有指定鍵值,預設是0。

Page 27: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-2-2 結合陣列結合陣列結合陣列結合陣列 -新增和刪除結合陣列元素新增和刪除結合陣列元素新增和刪除結合陣列元素新增和刪除結合陣列元素

�在結合陣列新增元素,就是使用指定敘述指定新元素,不過,除非是取代,在新增前請先使用isset()檢查鍵值是否已經重複,如下所示:

if (!isset($arr["type"]))

$arr["type"] = "PHP";

�上述if條件使用isset()檢查"type"鍵值的陣列元素是

否存在,如果不存在,才使用指定敘述新增元素。刪除結合陣列元素是使用unset(),如下所示:

unset($arr["type"]);

�上述程式碼刪除結合陣列中鍵值"type"的元素。

Page 28: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-2-2 結合陣列結合陣列結合陣列結合陣列 -走訪結合陣列元素走訪結合陣列元素走訪結合陣列元素走訪結合陣列元素

�結合陣列一樣可以使用foreach迴圈走訪陣列元素,如下所示:

foreach($arr as $key=>$value) echo "$key=>$value ";

�上述foreach迴圈括號在as關鍵字前是走訪陣列;之後使用「=>」符號取得各元素的鍵值$key和值$value。

Page 29: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-2-2 結合陣列結合陣列結合陣列結合陣列 -以以以以1開始的索引陣列開始的索引陣列開始的索引陣列開始的索引陣列

� PHP索引陣列預設的索引值是從0開始,因為PHP

可以自行指定索引值,換個角度來說,它就是一種正整數鍵值的結合陣列,我們可以將索引陣列改為從1開始,如下所示:

$weekday = array( 1=>"Mon", "Tue", "Wed", "Thu",

"Fri", "Sat", "Sun");

�上述索引陣列$weekday的第1個元素指定索引值為1,所以,之後的元素就是從1開始依序增加陣列的索引值。

Page 30: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-2-3 結合陣列的相關函數結合陣列的相關函數結合陣列的相關函數結合陣列的相關函數

函數函數函數函數 說明說明說明說明

array_keys(array) 傳回參數結合陣列中鍵值的陣列

array_values(array) 傳回參數結合陣列中值的陣列

reset(array) 將內部陣列指標指向參數陣列的第1個元素

current(array) 傳回參數陣列內部陣列指標目前的元素值

key(array) 傳回參數陣列內部陣列指標目前元素的鍵值

next(array) 將內部陣列指標指向參數陣列的下1個元素

end(array) 將內部陣列指標指向參數陣列的最後1個元素

prev(array) 將內部陣列指標指向參數陣列的前1個元素

each(array) 傳回參數陣列目前元素鍵值和值的陣列,並且移到下一個元素,傳回4個元素的陣列,其鍵值分別為:0、1、key和value,鍵值0和key同為元素的鍵值,1

和value同為元素值

Page 31: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-2-4 函數不定長度的參數列函數不定長度的參數列函數不定長度的參數列函數不定長度的參數列 -說明說明說明說明

�在PHP 5.5版的PHP函數支援「可變長度參數列」(Variable-Length Arguments),函數參數並不用指明,我們可以呼叫相關PHP函數來取得傳入的參數資料,其說明如下表所示:

函數函數函數函數 說明說明說明說明

func_num_args() 取得傳入的參數個數

func_get_args() 取得傳入參數的陣列

func_get_arg(index) 取得參數index的第幾個參數值,從0開始

Page 32: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-2-4 函數不定長度的參數列函數不定長度的參數列函數不定長度的參數列函數不定長度的參數列 –

建立可變長度參數列的建立可變長度參數列的建立可變長度參數列的建立可變長度參數列的PHP函數函數函數函數

� PHP函數如果使用不定長度參數列的函數,就不需指明參數列,如下所示:function sum() { … }

�上述sum()函數並沒有參數列,不過,並不表示我們不能傳入引數,呼叫sum()函數的程式碼,如下所示:sum(34, 56);

sum(23, 56, 90);

�上述函數呼叫依序傳入2和3個引數,在函數中可以使用上表PHP函數取得傳入的參數個數和值。

Page 33: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-2-4 函數不定長度的參數列函數不定長度的參數列函數不定長度的參數列函數不定長度的參數列 –

「「「「...」」」」符號的可變長度參數列符號的可變長度參數列符號的可變長度參數列符號的可變長度參數列

� PHP 5.6版的可變長度參數列支援「...」符號來指明參數名稱,如下所示:function sum(int ...$array) {

$count = count($array);

echo "參數個數: $count <br/>";

$total = 0;

for ( $i = 0; $i < $count; $i++ ) {

echo "參數$i=>$array[$i] ";

$total += $array[$i];

}

echo "<br/>參數總和: $total<br/>";

}

Page 34: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-2-4 函數不定長度的參數列函數不定長度的參數列函數不定長度的參數列函數不定長度的參數列 –

「「「「...」」」」符號的可變長度參數列符號的可變長度參數列符號的可變長度參數列符號的可變長度參數列

� sum()函數的參數名稱$array使用「...」符號開頭,並且指明型態是int,因為參數可能有多個,所以參數$array是一個陣列,換句話說,我們可以直

接使用此陣列來取得傳入的參數值,而不再需要使用上表的PHP函數。

�不只如此,因為指明參數型態是int,如果傳入的

參數值是字串,也會自動轉換成整數來執行加總計算,如下所示:

sum(34, "56"); // 2個參數

Page 35: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-3 陣列的搜尋與排序陣列的搜尋與排序陣列的搜尋與排序陣列的搜尋與排序

� 7-3-1 排序與搜尋的基礎

� 7-3-2 陣列排序與搜尋函數

Page 36: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-3-1 排序與搜尋的基礎排序與搜尋的基礎排序與搜尋的基礎排序與搜尋的基礎 -排序的基礎排序的基礎排序的基礎排序的基礎

�排序工作是將一些資料依照特定原則排列成遞增或遞減順序。例如:整數陣列$data[]的內容,如下所示:

$data[0]=89 $data[1]=34 $data[2]=78 $data[3]=45

�上述陣列$data[]是以整數大小將陣列元素依遞增的順序排序,排序的結果如下所示:

$data[0]=34 $data[1]=45 $data[2]=78 $data[3]=89

�陣列$data[]已經排序,其大小順序如下所示:

$data[0] < $data[1] < $data[2] < $data[3]

Page 37: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-3-1 排序與搜尋的基礎排序與搜尋的基礎排序與搜尋的基礎排序與搜尋的基礎 -搜尋的基礎搜尋的基礎搜尋的基礎搜尋的基礎

�搜尋工作是在資料中找出是否存在與特定值相同的資料,搜尋的值稱為「鍵值」(Key),如果資料存在,就進行後續的資料處理。例如:查詢電話簿是為了找朋友的電話號碼,然後與他連絡;在書局找書是為了找到後買回家閱讀。

�搜尋方法依照搜尋的資料分為兩種,如下所示:• 沒有排序的資料:針對沒有排序的資料執行搜尋,需要從資料的第1個元素開始比較,從頭到尾確認資料是否存在。

• 已經排序的資料:搜尋就不需要從頭開始一個個的比較。例如:在電話簿找電話,相信沒有人是從電話簿的第一頁開始找,而是直接從姓出現的頁數開始找,因為電話簿已經依照姓排序好。

Page 38: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-3-2 陣列排序與搜尋函數陣列排序與搜尋函數陣列排序與搜尋函數陣列排序與搜尋函數

函數函數函數函數 說明說明說明說明

sort(array [, int]) 將參數索引陣列的元素從小到大排序,第2個參數指定比較方式

rsort(array [, int]) 如同sort(),只是改為從大到小

asort(array [, int]) 將參數結合陣列的值從小到大排序,第2個參數指定比較方式

arsort(array [, int]) 如同asort(),只是改為從大到小

ksort(array [, int]) 將參數結合陣列的鍵值從小到大排序,第2個參數指定比較方式

krsort(array [, int]) 如同ksort(),只是改為從大到小

in_array(value, $array

[, bool])

檢查第1個參數值是否在第2個參數的陣列中,如果是,傳回true;否則傳回false,如果第3個參數為

true,表示同時檢查型態是否相同

array_search(value,

$array[, bool])

如同in_array()函數,只是傳回的是找到元素的索引或鍵值,沒有找到傳回false

Page 39: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-4 字串處理函數字串處理函數字串處理函數字串處理函數

� 7-4-1 字串長度、剪裁與大小寫轉換

� 7-4-2 子字串與字元搜尋

� 7-4-3 子字串和字元處理

� 7-4-4 字串的比較

� 7-4-5 Web使用的字串函數

Page 40: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-4 字串處理函數字串處理函數字串處理函數字串處理函數

� PHP字串是一個序列的字元集合,它是使用單引號「'」或雙引號「"」括起的文字內容,如下所示:

$str1 = 'PHP與MySQL網頁設計範例教本';

$str2 = "Hello World!";

�在PHP變數可以使用指定敘述來指定字串值,並且提供字串函數來處理字串變數。

Page 41: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-4-1 字串長度字串長度字串長度字串長度、、、、剪裁與大小寫轉換剪裁與大小寫轉換剪裁與大小寫轉換剪裁與大小寫轉換

� PHP字串函數可以取得字串長度、剪裁和進行英文字串內容的大小寫轉換。相關函數的說明如下表所示:

函數函數函數函數 說明說明說明說明

strlen(string) 取得字串長度,傳回字串擁有多少個字元

strtolower(string) 將字串的英文字母轉換成小寫字母

strtoupper(string) 將字串的英文字母轉換成大寫字母

trim(string) 刪除字串前後端的空白字元

ltrim(string) 刪除字串開頭的空白字元

rtrim(string) 刪除字串結尾的空白字元

chop(string) 同rtrim()函數

Page 42: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-4-2 子字串與字元搜尋子字串與字元搜尋子字串與字元搜尋子字串與字元搜尋函數函數函數函數 說明說明說明說明

strpos(string, mixed [, int]) 傳回第2個參數字串或字元在第1個參數中第1次搜

尋到的索引位置,第3個參數是指定開始搜尋位置

,以0開始,沒有找到傳回false

strrpos(string, mixed) 傳回從最後一個字元開始反向搜尋第2個參數的字

串或字元在第1個參數中第1次出現的索引位置,

以0開始,沒有找到傳回false

strstr(string, mixed) 傳回第2個參數字串或字元在第1個參數中第1次搜

尋到的位置至最後的子字串,沒有找到傳回false

,比較時區分英文字母大小寫

stristr(string, mixed) 傳回第2個參數字串或字元在第1個參數中第1次搜

尋到的位置至最後的子字串,沒有找到傳回false

,比較時不區分英文字母大小寫

strchr(string, mixed) 同strstr()函數

strrchr(string, mixed) 傳回從最後一個字元開始反向搜尋第2個參數字元

(如為字串就是第1個字元)在第1個參數中第1次

出現的位置到結束的子字串,沒有找到傳回false

Page 43: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-4-3 子字串和字元處理子字串和字元處理子字串和字元處理子字串和字元處理

函數函數函數函數 說明說明說明說明

chr(int) 取得參數int的ASCII碼字元

substr(string, int [, int]) 從第1個參數字串的第2個參數int開始取出剩下字

元的字串,如有第3個參數是取出的長度

substr_count(string, string) 計算第2個參數字串在第1個參數字串出現的次數

substr_replace(string, string , int [,

int])

在第1個參數字串中的第3個參數位置開始取代成

第2個參數的字串,如有第4個int參數是取代長度

strrev(string) 傳回參數字串的反轉字串,例如:"username"反轉

成"emanresu"

str_repeat(string, int) 重複第1個參數字串,共可重複第2個參數的次數

explode(string, string [, int]) 傳回第2個參數字串中,以第1個參數分割成元素

的陣列,如有第3個參數是最大分割的陣列元素數

implode(string, array) 將第2個參數的陣列元素使用第1個參數的字串連

接起來

Page 44: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-4-4 字串的比較字串的比較字串的比較字串的比較

� PHP函數的字串比較是一個字元一個字元比較字元

的內碼值,直到比較出大小為止。相關函數的說明如下表所示:

函數函數函數函數 說明說明說明說明

strcmp(string, string) 比較2個參數字串的內容,傳回值是整數,0表示相等;<0表示第2個參數的字串比較大;>0表示第2個參數的字串比較小

strncmp(string, string, int) 只比較2個字串前int個字元

strcasecmp(string, string) 忽略英文字母大小寫,比較2個字串的內容

strncasecmp(string,string,int) 忽略英文字母大小寫,比較2個字串的前int個字元

Page 45: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)

7-4-5 Web使用的字串函數使用的字串函數使用的字串函數使用的字串函數

� PHP提供多種支援Web網站開發的相關函數。相關函數的說明如下表所示:

函數函數函數函數 說明說明說明說明

addslashes(string) 在單引號「'」、雙引號「"」、反斜線「\」前加上反斜線

stripslashes(string) 刪除參數字串中的反斜線

htmlentities(string) 將字串的字元轉換成HTML字元集

nl2br(string) 將參數字串中的'\n'字元轉換成HTML的換行標籤<br/>

strip_tags(string) 刪除參數字串中的HTML標籤

Page 46: PHP Ch07 [ ۮe Ҧ ]) - csd.nutn.edu.t · 7-1-5 索引陣列的相關函數 函數 說明 array_pad(array, int, value) ( 1陣充. 2 )數 int 寸 正右,- ;是 48參數 value + array_unique(array)