採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

配列の操作関数

テクノロジ系 / array-basic (添字配列・配列関数・explode/implode)

配列の操作関数

Lesson 4 / Chapter 8

ゴール

配列の 両端 を出し入れする 4 つの関数を使い分けられる。

末尾に追加      array_push
末尾から取り出す  array_pop
先頭から取り出す  array_shift
先頭に追加      array_unshift

スタック (LIFO) とキュー (FIFO) をこの 4 つで組めるところまで持っていく。

末尾に追加

<?php
$stack = [10, 20];
array_push($stack, 30);

print_r($stack);
// [10, 20, 30]
  • array_push($arr, X) で末尾に追加
  • $arr[] = X と同じ動作 (シンタックスシュガー)
  • どちらを書いても OK

末尾から取り出す

<?php
$stack = [10, 20, 30];
$last = array_pop($stack);

echo $last . "\n";    // 30
print_r($stack);      // [10, 20]
  • 末尾の要素が 返り値 で返り、配列からは消える
  • array_push + array_pop の組で スタック (後入れ先出し) になる
  • Undo 履歴を「直前の操作だけ戻す」用途

先頭から取り出す

<?php
$queue = ["a", "b", "c"];
$first = array_shift($queue);

echo $first . "\n";   // a
print_r($queue);      // ["b", "c"]
  • 先頭の要素が返り値、配列からは消える
  • array_push + array_shift の組で キュー (先入れ先出し) になる
  • タスクを古い順に処理する用途

先頭に追加

<?php
$queue = ["b", "c"];
array_unshift($queue, "a");

print_r($queue);      // ["a", "b", "c"]
  • array_unshift($arr, X) で先頭に追加
  • 「割り込みタスク」を先頭に入れたいときに使う

末尾は速い・先頭は遅い

array_push   / array_pop    → 末尾だけ動かす → 速い (O(1))
array_unshift / array_shift → 全要素の添字を振り直す → 遅い (O(N))
  • 大量データで先頭操作を繰り返すと じわじわ遅くなる
  • まず「末尾操作で済ませられないか」を考える

このチャプターでできるようになること

array_push($arr, X) / array_pop($arr) で末尾を出し入れできる

array_shift($arr) / array_unshift($arr, X) で先頭を出し入れできる

✅ スタック (LIFO) とキュー (FIFO) を組める

✅ 先頭操作が O(N) になることを意識できる

→ ドリルへ

考えてみよう

既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。

ドリル 01 — array_push で末尾追加

問題

配列 [10, 20, 30] に対して array_push40 を追加し、print_r で中身を表示してください。

期待される出力:

Array
(
    [0] => 10
    [1] => 20
    [2] => 30
    [3] => 40
)

採点

php scripts/grade.php topics/array-basic/ch08-array-manipulation/drill/01-push/

ヒント

  • $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
)

採点

php scripts/grade.php topics/array-basic/ch08-array-manipulation/drill/02-pop/

ヒント

  • $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
)

採点

php scripts/grade.php topics/array-basic/ch08-array-manipulation/drill/03-shift/

ヒント

  • $nums = [10, 20, 30, 40];
  • array_shift($nums);
  • print_r($nums);