PHPで配列から要素を削除する
PHPで配列から要素を削除するには、主に unset()
関数と array_splice()
関数を使用します。
unset() 関数
- 指定したインデックスまたはキーの要素を削除します。
- 配列のインデックスは再構築されません。
<?php
$fruits = ['apple', 'orange', 'pear'];
// インデックス 1 の要素を削除
unset($fruits[1]);
print_r($fruits); // 出力: Array ( [0] => apple [2] => pear )
array_splice() 関数
- 指定した範囲の要素を削除し、配列を再構築します。
<?php
$numbers = [1, 2, 3, 4, 5];
// インデックス 2 から 1 つの要素を削除
array_splice($numbers, 2, 1);
print_r($numbers); // 出力: Array ( [0] => 1 [1] => 2 [2] => 4 [3] => 5 )
どちらを使うべきか
- 単一の要素を削除し、インデックスの再構築が必要ない場合は
unset()
を使用します。 - 複数の要素を削除したり、配列の構造を変更したい場合は
array_splice()
を使用します。
注意点
unset()
は要素を削除しますが、メモリから解放されるわけではありません。array_splice()
は配列の構造を変更するため、慎重に使用してください。
array_filter()
を使用して条件に基づいて要素を削除することもできますが、通常はunset()
やarray_splice()
が効率的です。
具体的な例
- 特定のキーの要素を削除する:
$data = ['name' => 'Alice', 'age' => 30, 'city' => 'Tokyo']; unset($data['age']);
- 配列の先頭から 2 つの要素を削除する:
$numbers = [1, 2, 3, 4, 5]; array_splice($numbers, 0, 2);
PHP配列要素削除解説
unset()関数による要素削除
<?php
$fruits = ['apple', 'orange', 'pear'];
// インデックス 1 の要素を削除
unset($fruits[1]);
print_r($fruits); // 出力: Array ( [0] => apple [2] => pear )
unset()
関数は、指定したインデックスまたはキーの要素を配列から削除します。- 上の例では、インデックス 1 の要素('orange')が削除されます。
- 削除された後の配列は、インデックスが連続していないことに注意してください。
array_splice()関数による要素削除
<?php
$numbers = [1, 2, 3, 4, 5];
// インデックス 2 から 1 つの要素を削除
array_splice($numbers, 2, 1);
print_r($numbers); // 出力: Array ( [0] => 1 [1] => 2 [2] => 4 [3] => 5 )
array_splice()
関数は、指定した範囲の要素を削除し、配列を再構築します。- 第1引数は対象の配列、第2引数は削除開始位置、第3引数は削除する要素数を指定します。
- 上の例では、インデックス 2 の要素('3')が削除され、残りの要素のインデックスが再設定されます。
PHP配列要素削除の代替方法
これまで unset()
と array_splice()
について説明しましたが、他にも配列から要素を削除する方法があります。
array_diff()関数
- 配列の差を求める関数ですが、要素の削除にも利用できます。
- 新しい配列を返します。
<?php
$fruits = ['apple', 'orange', 'pear', 'banana'];
$remove = ['orange', 'banana'];
$result = array_diff($fruits, $remove);
print_r($result); // 出力: Array ( [0] => apple [2] => pear )
array_diff()
と似ていますが、キーを比較して差を求めます。- 連想配列でキーに基づいて要素を削除する際に便利です。
<?php
$data = ['name' => 'Alice', 'age' => 30, 'city' => 'Tokyo'];
$remove_keys = ['age'];
$result = array_diff_key($data, array_flip($remove_keys));
print_r($result); // 出力: Array ( [name] => Alice [city] => Tokyo )
array_filter()関数
- 配列の要素をフィルタリングする関数ですが、条件式で要素を削除することもできます。
<?php
$numbers = [1, 2, 3, 4, 5];
$result = array_filter($numbers, function($value) {
return $value !== 3;
});
print_r($result); // 出力: Array ( [0] => 1 [1] => 2 [3] => 4 [4] => 5 )
unset()
はシンプルで、単一の要素を削除するのに適しています。array_splice()
は配列の構造を変更したい場合や、連続する複数の要素を削除するのに適しています。array_diff()
やarray_diff_key()
は、既存の配列から新しい配列を作成したい場合や、複数の要素を一度に削除したい場合に便利です。array_filter()
は条件に基づいて要素を削除したい場合に柔軟性があります。
array_diff()
、array_diff_key()
、array_filter()
は新しい配列を返すため、元の配列は変更されません。array_filter()
のコールバック関数内でfalse
を返すと、その要素は削除されます。
php arrays unset