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

PHP 陣列堆疊操作:array_push() 完整指南與效能比較

     編輯:PHP 相關知識

基本語法

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 組合。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved