[PHP]連想配列の特定の値を削除するには?

PHP

どうも、ちょげ(@chogetarou)です。

連想配列(associative array)の特定の値を削除する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

連想配列(associative array)の特定の値を削除する方法は、3つあります。

array_filter()

ひとつめは、array_filter()を使う方法です。

まず、array_filter()を呼び出します。

array_filter()の第1引数に対象の連想配列、第2引数に1つの引数を持つ関数を指定します。

そして、第2引数の関数で、特定の値でない引数で「true」となる条件式を返します。

//arr=対象の連想配列, del_value=削除する値
$result = array_filter($arr, function ($value) { return $value !== del_value; });

上記のarray_filter()は、第1引数の連想配列(associative array)から特定の値を削除した連想配列を生成します。

array_filter()は、対象の連想配列に影響を与えません。

使用例

<?php
$numbers = [
    "one" => 1,
    "サン" => 3,
    "two" => 2,
    "three" => 3,
    "さん" => 3,
    "三" => 3,
    "four" => 4,
    "five" => 5,
    "参" => 3,
];

$result = array_filter($numbers, function ($value) { return $value !== 3; });

print_r($result);
?>
出力:
Array
(
    [one] => 1
    [two] => 2
    [four] => 4
    [five] => 5
)

array_diff()

ふたつめは、array_diff()を使う方法です。

まず、array_diff()を呼び出します。

そして、array_diff()の第1引数に対象の連想配列、第2引数に削除する値を持つ配列を指定します。

//arr=対象の連想配列, value=削除する値
$result = array_diff($arr, [value]);

上記のarray_diff()は、第1引数の連想配列(associative array)から特定の値を削除した連想配列を生成します。

array_diff()は、対象の連想配列に影響を与えません。

使用例

<?php
$numbers = [
    "one" => 1,
    "サン" => 3,
    "two" => 2,
    "three" => 3,
    "さん" => 3,
    "三" => 3,
    "four" => 4,
    "five" => 5,
    "参" => 3,
];

$result = array_diff($numbers, [3]);

print_r($result);
?>
出力:
Array
(
    [one] => 1
    [two] => 2
    [four] => 4
    [five] => 5
)

array_search() + unset()

みっつめは、array_search()とunset()を使う方法です。

まず、if文で条件分岐します。

if文の条件式でarray_search()を呼び出し、array_search()の結果を変数に代入します。

また、array_search()の結果が「false」以外であることを条件にします。

array_seach()の第1引数に削除する値、第2引数に対象の連想配列を指定します。

そして、if文のブロックでunset()を呼び出します。

unset()の引数で、連想配列のarray_search()の結果のキーにアクセスします。

//arr=対象の配列, value=削除する値
if (($key = array_search(value, $arr)) !== false) {
    unset($arr[$key]);
}

上記のunset()は、対象の連想配列(associative array)からarray_search()の第1引数の値を削除します。

同じ値が複数ある場合は、先頭の要素だけ削除されます。

使用例

<?php
$numbers = [
    "one" => 1,
    "two" => 2,
    "three" => 3,
    "four" => 4,
    "five" => 5,
];

if (($key = array_search(3, $numbers)) !== false) {
    unset($numbers[$key]);
}

print_r($numbers);
?>
出力:
Array
(
    [one] => 1
    [two] => 2
    [four] => 4
    [five] => 5
)

まとめ

連想配列(associative array)の特定の値を削除する方法は、次の3つです。

  • array_filter()を使う方法
    $result = array_filter($arr, function ($value) { return $value !== del_value; });
  • array_diff()を使う方法
    $result = array_diff($arr, [value]);
  • array_search()とunset()を使う方法

コメント

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