PHP - BASIC - 4. PHPの配列 - 8. 要素の削除

配列の要素の削除は、追加や変更に比べると少し複雑です。たとえば "Andy""Betty""Carol" と3つの要素を持つ配列から "Betty" を削除するものとしましょう。まずは誤った例から見てみましょう。次のプログラム( array8.php )を作成してみましょう。

<?php
$names = ["Andy", "Betty", "Carol"];
$names[1] = "";
var_dump($names);

$names[1] = ""; と記述することで削除しているように見えますが、これでは ”Betty” という文字列データが "" という文字列データに上書きされるだけです。プログラミングの世界では "" のような文字列データは空文字などと呼びます。文字列データであることに変わりはありません。

それではプログラムを実行してみましょう。

$ php array8.php
array(3) {
  [0]=>
  string(4) "Andy"
  [1]=>
  string(0) ""
  [2]=>
  string(5) "Carol"
}

実行結果からも配列の要素数は 3 のままであることがわかります。

unset 関数

PHPの配列から要素を削除する方法の一つとして unset 関数を使うことができます。ただし unset 関数の挙動については注意する必要があります。次のプログラム( array9.php )を作成してみましょう。

<?php
$names = ["Andy", "Betty", "Carol"];
unset($names[1]);
var_dump($names);

上記のプログラムでは unset 関数によって $names 配列の要素番号が1の要素を削除しています。

それではプログラムを実行してみましょう。

$ php array9.php
array(2) {
  [0]=>
  string(4) "Andy"
  [2]=>
  string(5) "Carol"
}

配列から要素番号 1 の要素が削除されているのがわかります。ここで実行結果を注意深く考察してみましょう。 $names 配列の要素番号 1 を削除したのであれば、以下のような実行結果を期待するのはどうでしょうか。

$ php array9.php
array(2) {
  [0]=>
  string(4) "Andy"
  [1]=>
  string(5) "Carol"
}

現状の実行結果のように要素番号 1 が空いた状態ではなく、要素番号 2 の要素を要素番号 1 の要素としてスライドする方が自然です。 unset 関数による配列の要素の削除は、このように要素番号に空きが生じるため注意が必要です。配列の要素番号に空きがあると扱いにくいものになってしまいます。

array_splice 関数

unset 関数の問題を解決するためにはいくつかの方法があります。ここでは array_splice 関数を使う方法を紹介します。次のプログラム( array10.php )を作成してみましょう。

<?php
$names = ["Andy", "Betty", "Carol"];
array_splice($names, 1, 1);
var_dump($names);

array_splice 関数の引数には以下の3つを指定しています。

  1. 削除対象の配列:$names
  2. 削除対象の要素番号(開始位置):1
  3. 削除対象の要素数:1

上記のように指定することで要素番号1の要素を削除できます。

引数とは関数に与えるデータのことです。関数の仕組みの詳細については後述します。

それではプログラムを実行してみましょう。

$ php array10.php
array(2) {
  [0]=>
  string(4) "Andy"
  [1]=>
  string(5) "Carol"
}

期待した通り"Betty"の要素が削除されて、要素番号1の要素が"Carol"となっているのがわかります。

まとめ

  • 配列の要素を削除するには関数を使う
  • unset関数を使うと要素番号に空きが生じるので注意
  • array_splice関数を使うと配列の要素を削除できる