iT邦幫忙

2025 iThome 鐵人賽

DAY 15
0
Modern Web

PHP 新手自學筆記系列 第 15

【Day15】進階陣列函式

  • 分享至 

  • xImage
  •  

參考:w3schools

昨天整理的基本上都是處理一維陣列的函式,今天整理二維陣列的函式,可以用在處理資料之類的

array_column() : 從二維陣列中提取某一欄的值,並可選擇用另一欄作為鍵

格式 array_column(array, column_key, index_key)

參數說明:
array: 多維陣列
column_key: 要提取的欄位名稱或索引
index_key: 可選,用作新陣列索引的欄位

常見用法:二維關聯陣列

$data = 
[
    ["id" => 1, "name" => "Peter"],
    ["id" => 2, "name" => "Ben"],
    ["id" => 3, "name" => "Joe"]
];

print_r(array_column($data, 'name'));

輸出

Array
(
    [0] => Peter
    [1] => Ben
    [2] => Joe
)

說明: 從data這個2維關聯陣列裡面拿取name的value,能看到[0],[1],[2],這是陣列的索引從0開始

另外一個常見用法: 指定 key(第三個參數)

$data = 
[
    ["id" => 1, "name" => "Peter"],
    ["id" => 2, "name" => "Ben"],
    ["id" => 3, "name" => "Joe"]
];

print_r(array_column($data, 'name', 'id'));

輸出

Array
(
    [1] => Peter
    [2] => Ben
    [3] => Joe
)

說明: 這邊 第3個參數id 是取出來用來當 第2個參數的key,所以說現在key=1時他的value是Peter以此類推

在舉另外一個範例:

$data = 
[
    ["id" => 1, "name" => "Peter"],
    ["id" => 2, "name" => "Ben"],
    ["id" => 3, "name" => "Joe"]
];

print_r(array_column($data, 'id', 'name'));

輸出

Array
(
    [Peter] => 1
    [Ben] => 2
    [Joe] => 3
)

我把id和name對調了,可以發現他的key值由id變成了name,所以現在name是key去對應id(value)

array_column() 總結:
只有 2 個參數 → 純粹取值,key 就是 0,1,2… 的連續索引。
有第 3 個參數 → 指定新的 key,讓結果變成「關聯陣列」

array_map : 對陣列套用函式,產生新陣列 格式 array_map(callback, array1, array2, ...)

參數說明:
callback: 要執行的函數
array1, array2, ...: 要處理的陣列(可多個)

<?php
function test($a,$b) 
{
    return $a + $b;
}
$a=[1,2,3];
$b=[4,5,6];
print_r(array_map("test", $a, $b));
?>

輸出

Array
(
    [0] => 5
    [1] => 7
    [2] => 9
)

說明:
array_map("test", $a, $b) 會對應執行:
test(1, 4) → 回傳 5
test(2, 5) → 回傳 7
test(3, 6) → 回傳 9

array_filter : 過濾陣列元素 格式 array_filter(array, callback)

參數說明:
callback: 回調函數
array: 要處理的陣列(只能處理單一陣列)

<?php
function longWords($word) {
    return strlen($word) > 5;
}

$words = ["apple", "banana", "cat", "elephant", "dog", "butterfly"];
$longWords = array_filter($words, "longWords");
print_r($longWords);
?>

輸出

Array
(
    [1] => banana
    [3] => elephant
    [5] => butterfly
) // 把字元數量沒有大於5的過濾掉

補充:
array_filter 也可以不用回調函數

<?php
$data = ["apple", "", "banana", null, "cherry"];
$result = array_filter($data); // 自動過濾假值
print_r($result);
?>

輸出

Array
(
    [0] => apple
    [2] => banana
    [4] => cherry
)

array_reduce : 將陣列變為單一值 格式 array_reduce(array, callback, initial)

參數說明:
array: 要處理的陣列
callback: 回調函數,接收兩個參數(累積值, 當前值)
initial: 可選,初始值

<?php
function sum($carry, $item) {
    return $carry + $item;
}

$numbers = [1, 2, 3, 4, 5];
$total = array_reduce($numbers, "sum", 0);
echo $total;  // 輸出: 15
?>

執行過程

次數 $carry (初始或上次回傳) $item 計算方式 回傳值
1 0 1 0 + 1 1
2 1 2 1 + 2 3
3 3 3 3 + 3 6
4 6 4 6 + 4 10
5 10 5 10 + 5 15

總結:
$carry:累積的結果(從初始值開始,每次更新)
$item:陣列中當前要處理的元素
所以 array_reduce 就是把陣列中的每個元素逐一與累積值結合,最終得到一個結果!

array_combine : 將兩個陣列合併成一個關聯陣列 格式 array_combine(keys, values)

參數說明:
keys: 作為鍵的陣列
values: 作為值的陣列

<?php
$keys = ['name', 'age', 'city'];
$values = ['John', 25, 'Taipei'];

$result = array_combine($keys, $values);
print_r($result);
// 輸出:
// Array
// (
//     [name] => John
//     [age] => 25
//     [city] => Taipei
// )
?>

注意:

  1. 兩個陣列必須有相同的元素數量
  2. key陣列不能有重複值

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

尚未有邦友留言

立即登入留言