PHPの配列の要素を削除する方法について書いています。
PHPの配列の要素を削除するときには、下記の関数を使います。
・array_splice関数を使う
・array_filter関数を使う
記載しているサンプルコードはPHPのバージョン8.1.8で、動作検証しています。
unset関数で削除する
unset関数を使うことで、配列の要素を削除することができます。
公式のドキュメントはこちらにあります。
例えば、下記のように使うことが可能です。
<?php
$drinks = ['wine', 'milk', 'cola', 'beer', 'water'];
unset($drinks[3]);
print_r($drinks);
$drinks配列を5つの要素で作成しています。
次の行でunset関数を使って、配列の要素を削除しています。
unset関数に渡しているのは、削除したい配列要素です。
配列は0番目から数えます。今回は3番目を指定して、渡しているので’beer’が削除されます。
print_r関数で出力すると、下記のように’beer’が削除されたことが確認できました。
Array
(
[0] => wine
[1] => milk
[2] => cola
[4] => water
)
複数の要素を削除する
unset関数の引数は可変になっています。
そのため、複数の要素を削除することも可能です。
複数要素を削除する場合には、下記のように指定します。
<?php
$drinks = ['wine', 'milk', 'cola', 'beer', 'water'];
unset($drinks[0], $drinks[2], $drinks[3]);
print_r($drinks);
先ほどのプログラムを少し修正して、複数の要素を指定しました。
配列の0番目・2番目・3番目を指定しているので、今回は「wine, cola, beer」が対象になります。
print_r関数で出力すると、下記のように指定した要素が削除されました。
Array
(
[1] => milk
[4] => water
)
値を直接指定するとエラーになる
unset関数に、下記のように値を直接指定するとエラーになります。
<?php
$drinks = ['wine', 'milk', 'cola', 'beer', 'water'];
unset('milk');
次のようなエラーが表示されます。
PHP Parse error: syntax error, unexpected token ")", expecting "->" or "?->" or "{" or "[" in /Users/xxx/xxx.php
このように値を直接指定することはできないので、先ほどのように配列の要素番号を指定して、引数に渡すようにしましょう。
array_splice関数で削除する
array_splice関数を使うことで、指定した要素番号の位置から、指定した個数の要素数を削除することができます。
公式のドキュメントはこちらにあります。
例えば、下記のように使うことが可能です。
<?php
$drinks = ['wine', 'milk', 'cola', 'beer', 'water'];
array_splice($drinks, 2, 2);
print_r($drinks);
$drinks配列を5つの要素で作成しています。
次の行で、array_splice関数を使って、配列の要素を削除しています。
渡している引数の内容は、下記のようになります。
第2引数には削除を開始する配列位置を指定します。
第3引数には削除する個数を指定します。
今回の場合は、開始位置に「2」を指定しているので、’cola’の箇所から対象になります。
削除する個数には「2」を指定しているので、’cola’と’beer’が削除対象です。
print_r関数で出力すると、下記のように指定した2つの要素が削除されました。
Array
(
[0] => wine
[1] => milk
[2] => water
)
array_filter関数で削除する
array_filter関数を使うことで、配列の要素をフィルタリングして、不要な要素を削除することができます。
公式のドキュメントはこちらにあります。
例えば、下記のように使うことができます。
<?php
$drinks = ['wine', 'milk', 'cola', 'beer', 'water'];
$drinks = array_filter($drinks, function($drink) {
return substr($drink, 0, 1) === 'w';
});
print_r($drinks);
$drinks配列を5つの要素で作成しています。
次の行で、array_filter関数を使って、配列の要素をフィルタリングしています。(欲しい要素のみを取得します)
array_filter関数の引数は、下記のようにしています。
第2引数にはフィルタを行うコールバック関数になります。
コールバック関数でtrueを返す要素のみが、array_filter関数の返り値として返ってきます。
引数の$drinkは、配列の値がひとつずつ入ってきます。
コールバック関数の中でやっていることですが、まず、ひとつずつの値をsubstr関数で先頭の文字のみ取得しています。
そして、先頭の文字が’w’か比較しています。’w’だったときのみtrueになって要素が返ってきます。
今回の配列要素でいくと、’wine’と’water’が先頭’w’なので、trueになって返ってきます。
返ってきた配列を$drinks変数で受け取って上書きしています。
print_r関数で確認すると、作成したフィルターの内容が効いて、下記のように先頭が’w’の2つの要素のみが返ってきました。
Array
(
[0] => wine
[4] => water
)
おわりに
今回はPHPで配列の要素を削除する方法について書きました。
ひとつの値を削除する場合にはunset関数を使うと良いかと思います。
複数の値を削除する場合には、それぞれの関数の特徴を把握して、どれを使うか考えて使っていきましょう。
コメント