<?php
// PHP 5.6+ ... 運算子
function sum(...$numbers): float
{
return array_sum($numbers);
}
echo sum(1, 2, 3, 4); // 10
// 預設參數 (必須在非預設參數之後)
function greet(string $name, string $greeting = 'Hello'): string
{
return "$greeting, $name!";
}
echo greet('World'); // Hello, World!
echo greet('PHP', 'Hi'); // Hi, PHP!
// 類型聲明與嚴格模式
declare(strict_types=1);
function add(int $a, int $b): int { return $a + $b; }
add(1, 2); // 3
add(1.5, 2); // TypeError (嚴格模式)
?>
<?php
// 引用傳遞參數
function swap(&$a, &$b) {
$tmp = $a; $a = $b; $b = $tmp;
}
$x = 1; $y = 2;
swap($x, $y); // $x=2, $y=1
// 返回引用 (罕用,需 & 符號)
class Container {
private $data = [];
public function &getRef($key) {
return $this->data[$key];
}
}
$c = new Container();
$c->getRef('name') = 'John'; // 直接修改內部陣列
?>
<?php
// 匿名函數賦值給變數
$multiplier = fn($x) => $x * 2; // PHP 7.4 箭頭函數
$multiplier = function($x) { return $x * 2; }; // 傳統寫法
// 閉包 use 繼承外部變數
$factor = 10;
$scale = function($x) use ($factor) { return $x * $factor; };
echo $scale(5); // 50
// 靜態匿名函數 (無法 use 外部變數,效能略高)
$staticFn = static function($x) { return $x * 2; };
// 立即調用函數表達式 (IIFE)
$result = (function($x) { return $x * $x; })(5); // 25
?>
| 分類 | 函數 | 用途 | 範例 |
|---|---|---|---|
| 建立/合併 | array() / [] | 建立陣列 | ['a', 'b'] |
| array_merge | 合併 (字串鍵覆蓋) | array_merge(['a'=>1], ['a'=>2]) // ['a'=>2] | |
| array_merge_recursive | 遞歸合併 (字串鍵成陣列) | ['a'=>[1,2]] | |
| array_combine | 鍵值陣列建立關聯陣列 | array_combine(['a','b'], [1,2]) // ['a'=>1,'b'=>2] | |
| range | 數字/字母範圍 | range(1,5) // [1,2,3,4,5] | |
| compact | 變數建立關聯陣列 | compact('a','b') // ['a'=>値a, 'b'=>値b] | |
| 檢查/搜尋 | isset / array_key_exists | 鍵是否存在 | isset($arr['key']) |
| in_array | 值是否存在 (嚴格模式 true) | in_array('a', $arr, true) | |
| array_search | 搜尋值返回鍵 | array_search('a', $arr) | |
| array_keys | 所有鍵 | array_keys($arr) | |
| array_values | 所有值 (重置索引) | array_values($arr) | |
| array_column | 提取多維陣列欄位 | array_column($users, 'name') | |
| 修改/重排 | array_push / [] | 尾部壓入 | array_push($arr, 'c') |
| array_pop | 尾部彈出 | array_pop($arr) | |
| array_unshift | 頭部壓入 | array_unshift($arr, 'a') | |
| array_shift | 頭部彈出 | array_shift($arr) | |
| array_splice | 切片替換 (最強通用) | array_splice($arr, 1, 2, ['x','y']) | |
| array_reverse | 反轉順序 | array_reverse($arr) | |
| 排序 | sort / rsort | 值排序 (重置索引) | sort($arr) |
| asort / arsort | 值排序 (保持索引) | asort($arr) | |
| ksort / krsort | 鍵排序 | ksort($arr) | |
| usort | 自定義比較函數排序 | usort($arr, fn($a,$b) => $a <=> $b) | |
| natsort | 自然排序 | ['v2','v10'] → ['v2','v10'] | |
| shuffle | 隨機打亂 | shuffle($arr) | |
| 計算/統計 | count / sizeof | 元素個數 | count($arr) |
| array_sum | 值加總 | array_sum([1,2,3]) // 6 | |
| array_product | 值乘積 | array_product([1,2,3]) // 6 | |
| array_count_values | 值出現次數統計 | array_count_values(['a','a','b']) // ['a'=>2,'b'=>1] | |
| array_unique | 去除重複值 | array_unique([1,1,2]) // [1,2] | |
| array_diff | 差集 (值比較) | array_diff([1,2,3], [2]) // [1,3] |
<?php
$rawData = [
['id' => 1, 'name' => 'Alice', 'score' => 85, 'tags' => ['php', 'mysql']],
['id' => 2, 'name' => 'Bob', 'score' => 92, 'tags' => ['js', 'vue']],
['id' => 3, 'name' => 'Charlie', 'score' => 78, 'tags' => ['php', 'laravel']],
];
// 鏈式處理 (PHP 7.4+ 箭頭函數)
$topPhpUsers = array_filter($rawData, fn($u) => in_array('php', $u['tags']));
$topPhpUsers = array_filter($topPhpUsers, fn($u) => $u['score'] >= 80);
$topPhpUsers = array_map(fn($u) => ['name' => $u['name'], 'score' => $u['score']], $topPhpUsers);
usort($topPhpUsers, fn($a, $b) => $b['score'] <=> $a['score']);
print_r($topPhpUsers);
/*
Array
(
[0] => Array ( [name] => Alice [score] => 85 )
)
*/
?>
熟練運用函數特性與陣列函數,能以宣告式風格編寫清晰、高效的資料處理邏輯。