iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0
Modern Web

PHP 新手自學筆記系列 第 13

【Day13】一維陣列和多維陣列 取key / value (foreach)實作

  • 分享至 

  • xImage
  •  

一維陣列

$people = [
    "amy" => 32,
    "jon" => 24,
    "tim" => 30
];

這是一個很典型的一維關聯陣列,一個key對應一個value,那要怎麼取值呢?
可以用 foreach 這個專門用來跑陣列迴圈的方式來把值一個一個取出來

foreach($people as $name => $age)
    echo $name . ":" . $age . "<br>";
// 輸出:
// amy:32
// jon:24
// tim:30

$name:陣列的 key
$age:陣列的 value

二維陣列

二維陣列就是 一個陣列裡面又放了很多個陣列。
索引關聯陣列 來解釋

$people= [
    ["student" => "amy"], // 外層索引0 (key)
    ["teacher" => "jon"],// 索引1 (key)
    ["coach" => "tim"] // 索引2 (key)
    ];                              

**這是一個people陣列,這個陣列裡面又放了3個陣列,所以這個people又稱為2維陣列

外層陣列($people)包含三個內層陣列
外層陣列的 key 為索引:0、1、2
外層陣列的 value 是內層陣列
內層陣列也有自己的 key/value

外層索引 外層 value 內層 key 內層 value
0 ["student"=>"amy"] student amy
1 ["teacher"=>"jon"] teacher jon
2 ["coach"=>"tim"] coach tim

理解到這邊,來驗證一下,取出他外層的key

foreach($people as $key => $value) {
    echo $key ."<br>";
}
//輸出
//0
//1
//2

取出外層的value

foreach($people as $key => $value) {
    print_r($value);
    echo "<br>";
}
//輸出
// Array ( [student] => amy )
// Array ( [teacher] => jon )
// Array ( [coach] => tim )

解釋一下這裡為什麼要用 print_r而不直接echo,因為echo是直接輸出字串而people外層陣列的value是陣列而非字串,所以用echo的話會報錯。

接下來要取內層的key和value, 這需要用到雙層迴圈(又稱為巢狀迴圈)
為什麼要用到雙層呢,可以用程式碼來解釋

foreach($people as $person) {           // 外層迴圈抓每個內層陣列
    foreach($person as $key=>$value) {        // 內層迴圈抓內層 key和value
        echo $key .":" . $value ."<br>";
    }
}
//輸出
//student:amy
//teacher:jon
//coach:tim

解釋:
第一行:foreach($people as $person)

  • 迭代 $people(外層陣列),每次抓一個內層陣列賦值給 $person
  • 每次迴圈只處理一個內層陣列,下一次才換下一個。

第二行:foreach($person as $key => $value)

  • $person 現在是一個內層陣列。
  • 這個迴圈遍歷內層陣列的所有 key/value,把 key 和對應的 value 取出。

巢狀迴圈思路:
外層迴圈抓一個內層陣列 → 內層迴圈抓該陣列的每個 key/value

今天這篇筆記,觀念十分重要,我整理了很久,明天可以來學陣列函式了


上一篇
【Day12】PHP 內建函式 (字串)
下一篇
【Day14】基礎陣列函式
系列文
PHP 新手自學筆記15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言