PHPの配列で特定のキー・値を削除する方法

PHPで配列のキーまたは値から要素を削除する方法をまとめました。

配列のキーから削除する

配列に存在する指定のキーを指定して削除する場合はunsetを使用します。

一次元配列(連番)の場合

サンプルコード
$aryFruits = ['りんご', 'バナナ', 'ぶどう'];

//バナナを削除
unset($aryFruits[1]);

print_r($aryFruits);
Array
(
    [0] => りんご
    [2] => ぶどう
)

キーを振り直して連番にする(キーを詰める)

連番で構成された配列の削除分を詰めたい場合は、array_values関数を使用します。
これを使用することで、キーの振り直しが出来ます。

サンプルコード
$aryFruits = ['りんご', 'バナナ', 'ぶどう'];

//バナナを削除
unset($aryFruits[1]);

//キーを振り直す
$aryFruits = array_values($aryFruits);

print_r($aryFruits);
Array
(
    [0] => りんご
    [1] => ぶどう
)

連想配列の場合

連想配列の場合も、unsetからキーを指定して削除できます。

サンプルコード
$aryFruits = ['apple' => 'りんご', 'banana' => 'バナナ', 'grape' => 'ぶどう'];

//バナナを削除
unset($aryFruits['banana']);

print_r($aryFruits);
Array
(
    [apple] => りんご
    [grape] => ぶどう
)

配列の値から削除する

配列の値を検索して削除したい場合、候補が複数あるか、そうでないか、複数ある場合はすべて削除したいか、などが重要になります。
配列のキーは必ず一意(被らない)ですが、値の場合は被っている場合があるからです。

用途に応じて使い分けましょう。

同一の値が存在しない配列の場合

同一の値が存在しない場合、もしくは存在したら最初の1件を削除出来れば良い場合は、値からキーを取得するarray_searchが有効です。

参考 PHPで配列の値を検索するin_array、array_searchの使い方

キーを取得できたらunsetで削除できます。
キーが取得できない場合はfalseになるので、is_boolでarray_srarch関数がヒットしたか判定を行っています。

サンプルコード
$aryFruits = ['りんご', 'バナナ', 'ぶどう'];

//バナナのキーを取得
$key = array_search('バナナ', $aryFruits);

//array_searchでヒットした場合
if(!is_bool($key)){
    //バナナを削除
    unset($aryFruits[$key]);
    
    //キーを連番に振り直したい場合↓
    //$aryFruits = array_values($aryFruits);
}

print_r($aryFruits);
Array
(
    [0] => りんご
    [2] => ぶどう
)

同一の値が複数存在し、すべて削除したい場合

配列に同一の値が複数存在し、その値をすべて削除したい場合はいくつかの処理があります。

foreachを使用する

配列をすべてループするforeachで、キーと値を取得し、削除したい値であると判定したいものをunsetする処理です。

参考 PHPのforeach文を徹底解説【サンプルコード有】

サンプルコード
$aryFruits = ['りんご', 'バナナ', 'ぶどう', 'バナナ', 'いちご', 'バナナ', 'メロン'];

foreach($aryFruits as $key => $value){
    if($value === 'バナナ'){
        unset($aryFruits[$key]);
    }
}

//キーを連番に振り直したい場合↓
//$aryFruits = array_values($aryFruits);

print_r($aryFruits);
Array
(
    [0] => りんご
    [2] => ぶどう
    [4] => いちご
    [6] => メロン
)

array_filterを使用する

array_filterを使用して、配列の値すべてに関数を通した結果に絞り込むことで値のフィルタリングを行うことが出来ます。
今回はbananaCheckという「バナナ」以外ならtrueを通す関数を作成し、バナナのみが削除されています。

サンプルコード
function bananaCheck($str){
    if($str !== 'バナナ'){
        return true;
    }else{
        return false;
    }
}

$aryFruits = ['りんご', 'バナナ', 'ぶどう', 'バナナ', 'いちご', 'バナナ', 'メロン'];

$aryFruits = array_filter($aryFruits, "bananaCheck");

//キーを連番に振り直したい場合↓
//$aryFruits = array_values($aryFruits);

print_r($aryFruits);
Array
(
    [0] => りんご
    [2] => ぶどう
    [4] => いちご
    [6] => メロン
)

無名関数を使用することで、関数の定義を省略することも出来ます。

サンプルコード
$aryFruits = ['りんご', 'バナナ', 'ぶどう', 'バナナ', 'いちご', 'バナナ', 'メロン'];

$aryFruits = array_filter($aryFruits, function($str){
    if($str !== 'バナナ'){
        return true;
    }else{
        return false;
    }
});

//キーを連番に振り直したい場合↓
//$aryFruits = array_values($aryFruits);

print_r($aryFruits);
Array
(
    [0] => りんご
    [2] => ぶどう
    [4] => いちご
    [6] => メロン
)

配列の最初または最後の要素を削除する

配列の最初または最後の要素を削除したい場合は、手段はいくつかあります。

今回は、内部ポインタ等に依存せず確実に処理を行える、key()とarray_slice()を使用した方法をご紹介します。

参考 【PHP】array_sliceの使い方。配列を範囲指定して切り取る関数

array_sliceは、先頭または末尾の1件を配列として切り取ることが可能で、key()でその配列のキーを取得します。

参考 PHPの配列で最初の要素からキー・値を取得・削除する方法
参考 PHPの配列で最後の要素からキー・値を取得・削除する方法

最初の要素を削除

サンプルコード
$aryHoge = ['A', 'B', 'C', 'D', 'E'];
//最初のキーを取得
$first_key = key(array_slice($aryHoge, 0, 1, true));
//最初の要素を削除
unset($aryHoge[$first_key]);
//確認
print_r($aryHoge);
Array
(
    [1] => B
    [2] => C
    [3] => D
    [4] => E
)

最後の要素を削除

サンプルコード
$aryHoge = ['A', 'B', 'C', 'D', 'E'];
//最後のキーを取得
$last_key = key(array_slice($aryHoge, -1, 1, true));
//最後の要素を削除
unset($aryHoge[$last_key]);
//確認
print_r($aryHoge);
Array
(
    [0] => A
    [1] => B
    [2] => C
    [3] => D
)
以上、PHPの配列で特定のキー・値を削除する方法、でした。

コメント

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