進度條

【PHP】17. [補充]陣列與迴圈的關係

【PHP】17. [補充]陣列與迴圈的關係

作者: 進度條編輯群 更新日期:

此文章也有影片介紹,可以搭配影片一起學習!

01. [補充]陣列與迴圈的關係 (所屬課程)

02. [補充]陣列與迴圈的關係 (所屬課程)


以下正式開始文章


在上一堂課我們介紹了陣列,接下來會開始介紹迴圈。

 

如果有上過進度條其他課程的話,會發現我們的課程會把陣列和迴圈放在一起,而且一定會說一句話:

就是當你看到一個陣列,但是底下沒有迴圈的時候,代表這一段程式碼一定有問題,反之亦然,有迴圈但沒有陣列,代表這一段程式碼一定有問題。

 

這句話不代表說這個程式碼一定無法執行,或者說你的程式邏輯是錯的,而是說,它一定可以被寫得更漂亮

 

 

有陣列但沒有迴圈

因為如果你今天只是想要一個值,就不會想特別去包裝成一個陣列,占用更多記憶體空間,卻只取用其中的一個值。

 

也就是說,你使用陣列是有原因的。

 

而如果你今天有一連串的資料,但沒有用迴圈跑出一連串資料的話,是沒有辦法顯示出這一連串的資料的。(不過如果用類似遞迴或者是其他的方式顯示在廣義來說算是迴圈。)

 

有迴圈但沒有陣列

如果今天你得到的一個while迴圈或for迴圈,但是你卻沒有看到任何陣列的話,有可能是因為這個陣列被隱藏起來了,譬如在別的系統參數裡面,或是隱藏在零零碎碎資料的然後去跑,所以你可能會看到裡面有大量的if else。

 

這時候可以把它優化成另一個形式,把這些所有的情況,取出其中他們交集的部分,然後建立出新的一個類別(Class)。

 

全部建立成新的類別(Class)以後,然後再把它放進陣列裡面,那這樣子的話你的while或for迴圈就會看起來更漂亮一點,這個就是單純的MVC架構,程式碼也會看起來比較沒有那麼的凌亂。

 

比如說今天有一個物品,它有一個名稱、敘述、特徵,你可以把這些這一些東西都建立起來的變成類別(Class),這個行為其實就是建立model層(儲存數據),而迴圈一定是放在control層(邏輯判斷)。

 

[補充]MVC架構(Model-View-Controller)

Model層:儲存數據,可以想成儲存資料的地方

View層:視覺畫面的呈現,例如前端HTML/CSS/JavaScript與從Model層取得的資訊,可以想成使用者所看到的畫面

Controller層:邏輯判斷,把View層和Mode層連結起來,可以想成解析Model元件再傳給View元件的處理工廠

 

不過要提醒一下,前面講的「陣列」和迴圈共用,而不是「hash table」和迴圈共用,雖然「陣列」和「hash table」在PHP是同樣的東西,有可能會導致於前面的這一些話會造成理解上面有點問題。

 

「陣列」是有很多個單一的物件被包裝在一起,然後用迴圈去跑,「hash table」本身是有點像一個物件(object)的概念,它裡面是有很多種屬性的。

 

通常一個「hash table」可以直接轉換成一個類別(Class),這時候就會又扯到前面的MVC架構的概念,這是屬於model層的問題。

 

WORDPRESS不太像嚴謹的MVC架構,雖然它也有一點點類似的概念,但因為程式碼是混雜在一起,所以WORDPRESS的程式碼通常會比較髒亂一點。

 

不過如果你今天用的是其他的PHP框架,這個部分可以到那時候再弄懂就好。

那剛剛前面講的都算是比較進階的資訊,如果你是初學者不太理解的話可以先跳過。

 

如果你是進階的話,可以嘗試著去想想看是怎麼樣子的事情,那在後面的課程,有機會碰到這樣的概念,因為這種概念是每天都在用的唷~

 

 


最後,如果你喜歡我們的文章,別忘了到我們的FB粉絲團按讚喔!!

Small logo

進度條編輯群

進度條編輯團隊