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

PHP

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

・unset関数を使う
・array_splice関数を使う
・array_filter関数を使う

記載しているサンプルコードはPHPのバージョン8.1.8で、動作検証しています。

PR

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

このように値を直接指定することはできないので、先ほどのように配列の要素番号を指定して、引数に渡すようにしましょう。

PR

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関数を使うと良いかと思います。

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

コメント

Ads Blocker Image Powered by Code Help Pro

広告ブロッカーが検出されました。

ブラウザの拡張機能を使用して広告ブロックをしていることが確認できました。 ブラウザの広告ブロッカー機能を無効にしていただくか、codelikes.comをホワイトリストに追加し、更新をクリックしてください。 お手数ですが、よろしくお願いします🙇‍♂️
タイトルとURLをコピーしました