配列の要素を削除する
array_splice関数を使うと、配列の任意の要素を削除することができます。
PHP コード例
$slice_array = array_splice($array, 2, 2, null);
1つ目のパラメータは要素を削除したい配列、2つ目は削除を開始する位置、3つ目は削除する要素数、4つ目は削除の指定である「null」になります。
要素を削除する場合は、4つ目のパラメータは必ず「null」になります。
array_splice関数は要素を置き換える目的で使われることの多い関数ですが、上記のように指定すると任意の範囲の要素を「null」と置き換えることで要素を削除することができます。
また、置き換えた要素を返り値とするため、$slice_arrayのように変数に返り値を入れると削除した要素を取得することができます。
実際にコードで動作を確認してみましょう。
PHP コード例
<?php
// 変数の初期化
$array = null;
$slice_array = null;
// 配列を用意
$array = array( 'Shibaken', 'Pomeranian', 'Golden retriever', 'Greyhound', 'Siberian husky');
// 要素を削除
$slice_array = array_splice($array, 2, 2, null);
// 削除した後の配列を出力
var_dump($array);
// 削除された部分を出力
var_dump($slice_array);
削除された後の配列を出力すると次のようになります。
$arrayの出力例
array(3) {
[0]=> string(8) "Shibaken"
[1]=> string(10) "Pomeranian"
[2]=> string(14) "Siberian husky"
}
また、$slice_arrayを出力すると削除された要素を確認することができます。
$slice_arrayの出力例
array(2) {
[0]=> string(16) "Golden retriever"
[1]=> string(9) "Greyhound"
}
array_splice関数の2つ目のパラメータで指定した「2」の位置から、3つ目で指定した「2」の数だけ要素を削除していることが確認できました。
連想配列の要素を削除する
通常の数値が添字になっている配列だけでなく、連想配列についてもarray_splice関数を使って要素を削除することができます。
PHP コード例
<?php
// 新しい配列
$array = null;
$slice_array = null;
// 配列を用意
$array = array(
'dog1' => array(
'id' => 1,
'name' => 'Shibaken',
'age' => 3
),
'dog2' => array(
'id' => 2,
'name' => 'Pomeranian',
'age' => 5
),
'dog3' => array(
'id' => 3,
'name' => 'Golden retriever',
'age' => 6
),
'dog4' => array(
'id' => 4,
'name' => 'Greyhound',
'age' => 2
)
);
// 要素を削除
$slice_array = array_splice($array, 1, 1, null);
// 削除した後の配列を出力
var_dump($array);
// 削除された部分を出力
var_dump($slice_array);
削除された後の配列を出力すると次のようになります。
$arrayの出力例
array(3) {
["dog1"]=> array(3) { ["id"]=> int(1) ["name"]=> string(8) "Shibaken" ["age"]=> int(3) }
["dog3"]=> array(3) { ["id"]=> int(3) ["name"]=> string(16) "Golden retriever" ["age"]=> int(6) }
["dog4"]=> array(3) { ["id"]=> int(4) ["name"]=> string(9) "Greyhound" ["age"]=> int(2) }
}
削除された要素を$slice_arrayを出力して確認します。
$slice_arrayの出力例
array(1) {
["dog2"]=> array(3) { ["id"]=> int(2) ["name"]=> string(10) "Pomeranian" ["age"]=> int(5) }
}
連想配列は多次元配列であっても、指定した箇所の要素を削除することができました。