首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 自定義函數與陣列操作進階:可變參數、引用傳遞、陣列函數大全

     編輯:PHP 相關知識

自定義函數進階特性

1. 可變參數與預設值

<?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 (嚴格模式)
?>

2. 引用傳遞與返回引用

<?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'; // 直接修改內部陣列
?>

3. 匿名函數與閉包

<?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 )
)
*/
?>

熟練運用函數特性與陣列函數,能以宣告式風格編寫清晰、高效的資料處理邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved