【PHP】15. 陣列 Array (矩陣)介紹
【PHP】15. 陣列 Array (矩陣)介紹
此文章也有影片介紹,可以搭配影片一起學習!
01. 陣列(矩陣)介紹 (所屬課程)
甚麼是陣列(矩陣)?
如果你是程式語言的初學者,可能會對陣列或矩陣有些疑惑,其實在國中時期時我們就有學過矩陣了(遠目)~
如果要更簡單一點說明,我們可以把它想成是表格,
那其實用HTML語法也可以畫出表格,
<tbody>
<tr>
<td>
進度條
</td>
<td>
線上
</td>
<td>
課程
</td>
</tr>
</tbody>
</table>
瀏覽器顯示結果:
除了<table>標籤製作表格外,我們也可以用<ul><li>列出清單,
<li>紅色</li>
<li>黃色</li>
<li>綠色</li>
</ul>
輸出結果如下:
黃色
綠色
我們也可以以上面的邏輯,用PHP語法先建立一個表格,表格裡面放上儲存的資料。
和HTML不同的是,HTML是靜態的將表格印在瀏覽器上, PHP是你可以把資料都先儲存起來,等到需要某一個值的時候, 再把特定語法把它叫出來。
陣列(Array)的寫法
我們可以簡單用以下兩種方式建立一個陣列,
[重點]
1.值裡不一定只能放字串,也可以放數字、物件(object)…關於物件後面的章節會講到,現在先知道有這件事就好。
2.一個陣列可以儲放無限個值(實際上不可能,畢竟你的記憶體空間不是無上限的)。
雖然我們可以用字串的方式來分析,譬如說我們想要「進度條線上課程」的「線上」這兩個字,我們可以先建立變數:
$string = “進度條線上課程”
然後去做字串的分析,取出第四個字和第五個字。
但如果今天資料量很大,譬如一個班級的姓名名單,你把它全部排成一整個字串,那整個字串是沒有意義也很費工。
例如:「張小明林小華李小美」,三個人名字連在一起,很難用。
如果用陣列的方式,一開始就先切好,取得「線上」這兩個字我只要去找陣列裡面的第二個值「線上」就好。
所以你可能會寫出類似下面的程式:
$array1 = array("進度條", "線上", "課程" );
var_dump( $array1 );
echo "<br/>";
?>
輸出結果:
這邊我們先解釋一下var_dump()的輸出結果:
array(3) → 代表矩陣裡總共有3個值
[0] [1] [2] → 代表位於位於矩陣裡的排列,程式語言裡排序0, 1, 2是指在現實世界裡排第1,2,3個(由0開始很重要,一定要變成直覺反應)
string(9) string(6) string(6) →代表裡面的值有幾個字元,譬如「進度條」有9字元,「線上」有6個字元,「課程」6個字元 (在PHP裡一個中文字由3個字元組成的,一個英文字由1個字元組成)
如何用陣列取出特定的值?
如果我們只希望在$array1 =array( "進度條", "線上", "課程" )中,取出「進度條」這個值的話要怎麼做呢?
我們可以使用
也就是變數後加上[key],key放要取出第幾個值,第一個值就寫0。
$array1 =array("進度條","線上","課程");
echo $array1[0];
echo “<br/>”;
?>
輸出結果:
再給個例子
同樣我們也可以宣告一個英文版的$array2變數
$array2 = ["Progress","Bar","TW"];
var_dump($array2);
echo “<br/>”;
?>
輸出結果:
那麼如果我想要拿「Bar」這個值要怎麼做呢?留給同學試看看囉!
提示:利用 變數[key] 的方式
利用GET方法取值
在第12堂我們有學到如何用GET方法和POST方法取得HTML傳遞參數,首先先在程式碼加上
echo $_GET["value"];
$array1 = array("進度條", "線上", "課程");
echo $array1[0];
echo $_GET["value"];
echo "<br/>";
?>
接著在.php後輸入?value="進度條",按ENTER鍵執行,就可以利用GET方法取到網址參數「進度條」這個值了!
陣列(array)與雜湊表(hash table)
接下來的部分對初學者來說可能有點複雜與奇怪,首先在PHP裡面陣列(array)與雜湊(hash table)是同一件事情。那雜湊表(hash table)是甚麼?
它是類似JavaScript的Object資料型態(轉成文字就變JSON),在不同程式語言有不同的官方說法:
hash table 雜湊表 (Ruby on Rails)
key-value store 鍵值存儲
Dictionary 字典 (Object C、swift)
那麼它要怎麼使用呢?我們知道程式語言裡排序0,1,2 是指在現實世界裡排第1,2,3個,因此第0個是「進度條」,第1個是「線上」,我們可以這樣子寫:
// 沒看錯,直接使用 => 符號
$array1 = array(
0 => "進度條",
1 => "線上"
);
var_dump($array1);
echo $array1[1];
echo <br/>;
?>
結果和之前的array是一模一樣的。
也可以數字倒過來寫,最後加了逗點也不會報錯。
$array1 =array(
1 => "線上",
0 => "進度條", //", "可加可不加
);
var_dump($array1);
echo $array1[1];
echo <br/>;
?>
這時候你可以發現1在前面,0在後面,也就是說我們可以自己填上我們想要的key (箭頭前面的東西),而它不只可以放數字,也可以放字串,例如「online」。
$array1 =array(
"online" => "線上",
0 => "進度條",
);
var_dump($array1);
echo $array1["online"];
echo <br/>;
?>
這樣依然可以拿到「線上」這兩個字,有點像先前的GET方法。
代表我們可以用箭頭來設定key和值,“online “=> "線上",箭頭左邊放key,右邊放值。因此我們可以發現在PHP裡面,儘管我們使用的是array這個關鍵字,實際上產生出來是hash table。只是說宣告的時候,沒有使用箭頭的這種宣告方式。
這個與JavaScript是一樣,如果用箭頭的話,它可以把key從0,1,2,3,4,設成你指定的東西。
同一個array可以用不同型態的key,話雖如此但不建議,因為如同先前課程提到過的,PHP會自動轉換型別。
如果要使用key的話,就全部都用key,就算它是0它也應該是"0",否則程式碼一多的時候,容易碰到奇怪的問題。
特別注意,key的雙引號內的空白也是字串的一部分,key-value就是要key值完全正確才取得出value喔!
$array1 = array(
"online" => "線上",
0 => "進度條",
);
var_dump($array1);
echo $array1["online"];
echo <br/>;
?>
關於陣列的新增與刪除,將於下一堂課講解。
最後,如果你喜歡我們的文章,別忘了到我們的FB粉絲團按讚喔!!