講師 哥布林工程師
關於 用陣列來儲存多筆資料
你好 歡迎回到 Laravel 百萬年薪特訓營
這個單元我們來聊聊幾乎每個程式語言都會有的資料結構
那就是陣列
變數只能夠用來儲存單一筆資料
當資料過多時就需要使用兩種資料結構
那就是陣列以及集合
這個單元就來聊聊基本版的陣列
假如你今天要去 Costco 購物
如果要買的東西只有一個
你可以選擇直接記在腦中
就如同變數一樣
但假如你打算悠閒的在家中喝個拿鐵咖啡並把玩新買的 iPad
那恐怕就不只要買一個東西了
這時候你就需要列出一個清單來記錄要買哪些東西
[換頁]
這個清單就是陣列
陣列的英文是 Array
這個資料結構的特徵是可以有序地來儲存多筆資料
所謂有序就代表裡頭的資料順序是固定的
而存入的每筆資料則稱之為元素
元素的英文則是 Element
[換頁]
不妨想像一下有個櫃子
最上層抽屜放玩具
依次各層分別擺放衣服.文具與雜物
如果要把這個櫃子轉成陣列的話
你可以透過 array() 和中括號這兩種語法
像是左邊這兩行的寫法
功能上並沒有任何差異
你可以根據自己的習慣來選擇用哪一種寫法
我自己是比較偏好使用中括號
陣列的長度代表著該陣列所儲存的元素數量
像 $box 的長度就是 4
可以利用 count() 來計算陣列的長度
如果要取出陣列中的某一個元素
則是要搭配使用陣列變數以及中括號
並在中括號內傳入該元素的索引值
索引值我們等一下來談
假如要刪除整個陣列的話
可以透過 unset() 將陣列傳入即可
但如果要刪除陣列的某個元素
則是改成將該元素傳入 unset()
[換頁]
所謂索引值 index 指的是元素位於陣列中的所在位置
但不是從 1 起算 而是從 0 開始
這一點請特別注意
因此玩具的索引值為 0
而雜物的索引值則為 3
要取出玩具的語法也很簡單
比如 $box[1] 就能取出陣列中索引值為 1 的玩具
有意思的是要要存入新值與取出的語法相同
差別只在於位於等號的左邊或右邊
放在等號左邊時表示要在陣列的該位置放入新的內容
[換頁]
下一個來討論多維陣列的議題
你或許聽過二維陣列但不清楚是指什麼意思
那代表的是陣列內的某一個元素也是陣列
類似箱中箱的概念
以這張圖來說我們把第二層的文具替換成另一個儲藏箱
裡頭又有兩層可以放襪子與鞋子
那我們要取出襪子的話該怎麼寫才好呢
這對於新手來說或許有些困擾但其實並不困難
如果今晚要吃的牛肉被擺在冰箱第一層裡頭的保鮮盒
那你該如何取出牛肉才好呢
很簡單你需要先取出保鮮盒才能取出裡頭的牛肉
相同的道理你可以先寫 $box[1] 來取出儲藏櫃
繼續接 [0] 就能取出索引值為 0 的襪子囉
一旦理解了這個觀念那麼不管陣列再多層都難不倒你囉
[換頁]
這個單元的最後來討論一個在 Laravel 非常有用的陣列結構
Key Value 鍵值對
你可以把它理解為陣列的進階版本
一般陣列的資料是透過索引值來定位
而鍵值對則是索引值替換成一個自定義的 Key 或稱為鍵
這樣的好處是說在某些情況下
使用鍵來存取元素會比索引值更為直覺
就以這段程式碼來說
zack 100 和 300
分別代表角色的名稱以及血量和魔量
如果要取出血量的話用索引值就需要去記住位置
這很不直覺
改成鍵值對的話我們就能夠去指定 100 的鍵是 hp
之後就能夠改用 ['hp'] 來取出 100 了
這樣是否就直覺且好記多多
請務必多練習使用鍵值對
這在 Laravel 專案中經常會用到
[換頁]
如果還不太清楚陣列的實際應用方式可以參考下一個示範單元
如果有學過其他程式語言的話可以直接跳過
那這個單元就到這邊 掰掰
