概要
配列を スタック (後入れ先出し) や キュー (先入れ先出し) として使う場面は多い。タスクをため込んで順に処理する、未読メッセージを古い順に取り出す、Undo 履歴に積んでいく、など。PHP にはこういう「両端への出し入れ」を 1 関数で済ませる 専用の操作関数 が揃っていて、自前でループや unset を書くより圧倒的にラクになる。
末尾の出し入れは array_push($arr, X) (追加) と array_pop($arr) (取り出し & 削除) のペア。前章で出てきた $arr[] = X は array_push のシンタックスシュガーで、結果は同じだ。先頭の出し入れは array_shift($arr) (取り出し & 削除) と array_unshift($arr, X) (追加) のペア。これら 4 つを覚えるだけで、スタックもキューも組める。
性能上の落とし穴も知っておきたい。array_shift と array_unshift は 先頭を動かす関係で、残りの全要素の添字を振り直す必要がある。つまり長さ N の配列で O(N) の処理になる。一方 array_pop と array_push は末尾だけを動かすので O(1)。大量データを扱う時は、末尾操作で済ませられないか を最初に考えるクセをつけておくと、後で「なんか遅い」と困ったときの引き出しが増える。
学習目標
array_push($arr, X)で末尾に追加できる ($arr[] = Xと同じ)array_pop($arr)で末尾の要素を取り出して削除できるarray_shift($arr)で先頭の要素を取り出して削除できるarray_unshift($arr, X)で先頭に追加できる
ドリル
| no | 内容 |
|---|---|
| 01 | array_push で末尾追加した後の配列を print_r で表示 |
| 02 | array_pop で末尾削除した後の配列を print_r で表示 |
| 03 | array_shift で先頭削除した後の配列を print_r で表示 |
📝 演習: ドリル 01 — array_push で末尾追加
問題
配列 [10, 20, 30] に対して array_push で 40 を追加し、print_r で中身を表示してください。
期待される出力:
Array
(
[0] => 10
[1] => 20
[2] => 30
[3] => 40
)ヒント
$nums = [10, 20, 30];array_push($nums, 40);print_r($nums);
📝 演習: ドリル 02 — array_pop で末尾削除
問題
配列 [10, 20, 30, 40] に対して array_pop で末尾を削除し、削除後の中身を print_r で表示してください。
期待される出力:
Array
(
[0] => 10
[1] => 20
[2] => 30
)ヒント
$nums = [10, 20, 30, 40];array_pop($nums);print_r($nums);
📝 演習: ドリル 03 — array_shift で先頭削除
問題
配列 [10, 20, 30, 40] に対して array_shift で先頭を削除し、削除後の中身を print_r で表示してください。
先頭を削除すると 添字が 0 から振り直される ことに注目してください。
期待される出力:
Array
(
[0] => 20
[1] => 30
[2] => 40
)ヒント
$nums = [10, 20, 30, 40];array_shift($nums);print_r($nums);