基本語法
array_push(array &$array, mixed ...$values): int
- 將一或多個值**壓入陣列末尾** (堆疊 push)。
- 陣列長度遞增。
- 回傳**新的元素總數**。
- 參數為**參考傳遞** (
&$array),直接修改原陣列。
基本範例
<?php
// 1. 數字索引陣列
$stack = ["Dog", "Cat"];
$count = array_push($stack, "Horse", "Bird");
print_r($stack);
/*
Array ( [0] => Dog [1] => Cat [2] => Horse [3] => Bird )
*/
echo "新長度:$count"; // 4
// 2. 關聯陣列 (字串鍵名)
$assoc = ["a" => "Dog", "b" => "Cat"];
array_push($assoc, "Horse", "Bird"); // 新增元素會獲得數字索引 0, 1
print_r($assoc);
/*
Array ( [a] => Dog [b] => Cat [0] => Horse [1] => Bird )
注意:關聯陣列使用 array_push 會產生混合鍵名,通常不推薦
*/
?>
array_push() vs $arr[] = $value
| 特性 | array_push() | $arr[] = $value |
| 單一元素推入 | 函式呼叫開銷 | **語言結構,極快** (推薦) |
| 多元素一次推入 | array_push($arr, $a, $b, $c) 方便 | 需多行或 array_merge |
| 回傳值 | 新長度 | 無 (若需長度再 count()) |
| 第一參數非陣列 | 觸發 Warning | 自動建立陣列 |
效能測試 (百萬次推入)
<?php
$arr1 = []; $arr2 = [];
$iterations = 1_000_000;
$start = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
array_push($arr1, $i);
}
echo "array_push: " . (microtime(true) - $start) . " 秒<br>";
$start = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
$arr2[] = $i;
}
echo "\$arr[]: " . (microtime(true) - $start) . " 秒<br>";
/*
典型結果:
array_push: ~0.15 秒
$arr[]: ~0.08 秒 (快約 2 倍)
*/
?>
進階:保留鍵名的「關聯式推入」
若需指定鍵名推入關聯陣列,直接指派:
<?php
$assoc = ["a" => "Dog"];
$assoc["c"] = "Horse"; // 指定鍵名
$assoc[] = "Bird"; // 自動數字索引 (若不介意混合)
print_r($assoc);
相關函式:堆疊/隊列完整家族
| 函式 | 操作 | 位置 | 回傳 |
array_push() | 推入 | 末尾 (Top) | 新長度 |
array_pop() | 彈出 | 末尾 (Top) | 被移除的值 |
array_unshift() | 推入 | 開頭 (Bottom) | 新長度 |
array_shift() | 彈出 | 開頭 (Bottom) | 被移除的值 |
實作隊列
<?php
class Queue {
private $data = [];
public function enqueue($value) { array_push($this->data, $value); }
public function dequeue() { return array_shift($this->data); }
public function isEmpty() { return empty($this->data); }
}
$q = new Queue();
$q->enqueue('A'); $q->enqueue('B');
echo $q->dequeue(); // A
echo $q->dequeue(); // B
實作堆疊
<?php
class Stack {
private $data = [];
public function push($value) { $this->data[] = $value; } // 直接用 [] 更快
public function pop() { return array_pop($this->data); }
public function peek() { return end($this->data); }
}
注意事項
- 第一參數必須為陣列變數,不可為常值
array_push([1,2], 3) (會報錯)。
- 參考傳遞:函式簽名
array &$array 意味著只能傳入變數,且會修改原變數。
- PHP 7.3+
array_push() 支援可變參數 ...$values,舊版需一個個傳入。
總結
- 單一元素推入:**永遠用
$arr[] = $value**,最快、最簡潔。
- 批次推入多個值:
array_push($arr, ...$values) 方便 (PHP 7.3+)。
- 關聯陣列避免使用
array_push (會產生數字索引混雜)。
- 堆疊/隊列資料結構首選
array_push/pop、array_unshift/shift 組合。