要素の削除

配列の要素の削除は、追加や変更に比べると少し複雑です。たとえば"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つを指定しています。

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

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

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

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

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

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


前へ | 次へ | トレーニング