PHPの配列の要素を削除する3つの方法!(unset)

PHP

PHPの配列の要素を削除する方法について書いています。
PHPの配列の要素を削除するときには、下記の関数を使います。

・unset関数を使う
・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関数を使って、配列の要素を削除しています。
渡している引数の内容は、下記のようになります。

第1引数には削除する対象の配列を指定します。(参照渡しのため、渡すだけで削除可能です)
第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関数の引数は、下記のようにしています。

第1引数にはフィルタをかける配列を指定しています。
第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関数を使うと良いかと思います。

複数の値を削除する場合には、それぞれの関数の特徴を把握して、どれを使うか考えて使っていきましょう。

コメント

タイトルとURLをコピーしました