2023年10月24日

PHP 8 Array 教學(上):基本概念與操作

Array 是什麼?簡單來說,Array 是一種資料結構,用來儲存大量相似的資料。

如果沒有 Array,當你要儲存多個類似的資料,例如,三個數字,你必須要宣告並使用三個變數。

$num1 = 10;
$num2 = 20;
$num3 = 30;

但是透過 Aarry 的協助,你只需要使用一個變數。

$nums = [10, 20, 30];

當然 Array 不只讓你更方便地儲存資料,Array 作為 PHP 的核心資料結構,也提供了許多方便的方法,讓你可以更彈性的操作 Array 中的資料。

PHP Array 基本概念

PHP 的 Array,本質上是由多組鍵值對 (key-value pair) 組成的結構,在 Array 中的每一筆資料,都有一個 key,和其對應的 value,概念如下。

array(
    key  => value,
    key2 => value2,
    key3 => value3,
    ...
)

新建 Array

在 PHP 中,實際要使用 Array 的方式很簡單,可以透過array()來創造。

$nums = array(
  'a' => 10, 
  'b' => 20 ,
  'c' => 30
);

在 PHP 5.4 的版本以後,可以用比較精簡的 [] 來代替 array()

$nums = [
  'a' => 10, 
  'b' => 20 ,
  'c' => 30
];

兩者的意思是相同的,但建議新寫的程式採用短版,版面會比較精簡可讀。

另外,在創建 Array 的時候,不見得要提供 key值,像下面的作法也是合法的:

$nums = [10, 20, 30];

但 PHP 的 Array 仍是 key-value 的結構,為維持結構的一致性,採用這種寫法的時候,PHP 會自動加上 key。

所以上述的寫法,等同於:

$nums = [
  0 => 10, 
  1 => 20, 
  2 => 30
];

沒有提供 key 的 array,創建時 PHP 會從整數 0 開始,依序給予 key 值。

嚴格來說,PHP 是從目前已經使用過的整數 key 值中的最大值開始往後遞增。大家可以試試看 $nums = [2 => 10, 20, 30]; 會發生什麼事。

當然,你也可以把其他變數放到 Array 裡面。

$num1 = 10; $num2 = 20; $num3 = 30;
$nums = [$num1, $num2, $num3];
// 等同於 $nums = [10, 20, 30];

有指定 key 的 array 創建,一樣可以使用變數作為 value:

$nums = [
  'aa'  =>  $nums,
];

甚至 key 的值,也可以由變數決定,這邊就不再做示範,大家可以自己嘗試一下。

當你要debug array 的時候,直接 echo 是不行的,可以使用 print_rvar_dump 來印出 array 。

關於 key 跟 value

PHP Array 的 value,原則上可以放任何資料。只要是一般變數可以存的,都可以作為 Array 的 value。

key 原則上只能放整數跟字串,如果放其他類型的東西,有可能會被自動轉型,或者報錯。

你的 array 可以同時有整數跟字串的 key,PHP 沒有強制規定一個 array 的 key 值都要是同一個型別。例如下方的範例,是合法的,只是看起來有點怪異。

$nums = [                 
  0 => 10, 
  'a' => 20, 
  2 => 30
];

有一點比較特別的,如果你的 key 值是一個合法的整數,那他會被自動轉換成整數型態。

$nums = ['0' => 'foo', '10' => 'boo'];

等同於:

$nums = [0 => 'foo', 10 => 'boo'];

PHP Array 基本操作

把東西存入 Array,當然也需要把東西從 Array 中拿出來。

讀取資料

要讀取 Array 中的資料很容易,只要透過 [] 符號就可以做到。

[]中放入目前要拿取的 key 值,PHP Array 就可以找到對應的 value,並回傳。

字串範例:

$nums = [
  'a' => 10, 
  'b' => 20 ,
  'c' => 30
];

echo $num['a']; // 輸出: 10
echo $num['c']; // 輸出: 30

整數範例:

$nums = [10, 20, 30];

echo $num[0]; // 輸出: 10
echo $num[2]; // 輸出: 30

修改資料

想要修改 array 中的資料,只要把新的值,放到指定位置就好了。

舉例來說,想要把 'b'位置的值,更新成 25,只要透過[] 指定'b',並重新指派為 25 就可以了。

$nums = [
  'a' => 10, 
  'b' => 20 ,
  'c' => 30
];

$nums['b'] = 25;

當然,整數 key 也是一樣的做法,可以試著操作看看。

新增資料

要新增資料,通常會伴隨新的 key 值。所以要怎麼對一個既存的 array 新增一個 key 值?很簡單,又是我們的老朋友[]

例如我們想要新增一個 key 'd',我們可以這樣做:

$nums = [
  'a' => 10, 
  'b' => 20 ,
  'c' => 30
];

$nums['d'] = 40;

這樣 $nums 就會變成:

[
  'a' => 10, 
  'b' => 20 ,
  'c' => 30,
  'd' => 40
]

另外,如果你的 array 的 key 是純數字,例如:

$nums = [10, 20, 30];

可以透過更簡潔的方式來塞入一個新值:

$nums[] = 40;

[] 不指定 key 的時候,PHP 會自動幫你接在後面,變成:

[10, 20, 30, 40]
過去大家習慣用 array_push,但現在可以用這種比較簡潔的方式

移除資料

如果想要把一個 key 值,從 array 中移除,就要借助 unset 方法了。

例如,想要把 'b' 從 array 中拿掉,可以這麼做:

$nums = [
  'a' => 10, 
  'b' => 20 ,
  'c' => 30
];

unset($nums['b']);

結果就會變成:

[
  'a' => 10, 
  'c' => 30,
]

整數 key 也是同樣的操作,可以自己試試看。

小結

以上就是 PHP Array 的基本概念與操作,希望大家有理解。

接著會再說明常用的 array functions,也會說明 array 的進階應用。

下一篇:Array 教學,10 個必學的 PHP Array 實用作法與方法