配列から特定の値を持つ要素を検索して削除する場合、複数の方法が考えられる。下記は、foreach
を使って配列の値を確認していく一番シンプルな方法の例。
$array = [
['id' => 1000, 'name' => "aaa"],
['id' => 1001, 'name' => "bbb"],
['id' => 1002, 'name' => "ccc"],
];
$del_id = 1001;
foreach ($array as $i => $v)
{
if ($array[$i]["id"] == $del_id)
unset($array[$i]);
}
var_dump($array);
/* var_dump 出力
array(2) {
[0]=>
array(2) {
["id"]=>
int(1000)
["name"]=>
string(3) "aaa"
}
[2]=>
array(2) {
["id"]=>
int(1002)
["name"]=>
string(3) "ccc"
}
}
*/
また、別の方法として array_search()
を使う方法がある。array_search()
は、指定した値を配列内から探し、最初に見つかった要素のキーを返す関数である。
ただし、サンプルコードのような多次元配列に対して array_search()
を使う場合、1つ工夫が必要で array_column()
を使って検索対象にしたいデータを抜き出す必要がある。
// array_search()の例
$array = [
['id' => 1000, 'name' => "aaa"],
['id' => 1001, 'name' => "bbb"],
['id' => 1002, 'name' => "ccc"],
];
$del_id = 1001;
var_dump(array_column($array, "id"));
/*
array_columnを使うと、多次元配列から"id"キーに対応するデータを抜き出すことができる
array(3) {
[0]=>
int(1000)
[1]=>
int(1001)
[2]=>
int(1002)
}
*/
// "id"キーに対応する要素の値が$del_idを持つものを検索
$i = array_search($del_id, array_column($array, "id"));
if ($i)
unset($array[$i]);
var_dump($array);
/*
array(2) {
[0]=>
array(2) {
["id"]=>
int(1000)
["name"]=>
string(3) "aaa"
}
[2]=>
array(2) {
["id"]=>
int(1002)
["name"]=>
string(3) "ccc"
}
}
*/
さらに別の方法として、array_keys()
を使う方法がある。array_keys()
は、2番目の引数を指定するとその指定した値を持つ要素のキーのみを返してくれる。array_keys()
の返り値は、配列であることに注意。
また、array_search()
のときと同様に、多次元配列に対しては、array_column()
を使って検索対象にしたいデータを抜き出す必要がある。
// array_keys()の例
$array = [
['id' => 1000, 'name' => "aaa"],
['id' => 1001, 'name' => "bbb"],
['id' => 1002, 'name' => "ccc"],
];
$del_id = 1001;
$keys = array_keys(array_column($array, "id"), $del_id);
foreach ($keys as $i)
{
unset($array[$i]);
}
var_dump($array);
/*
array(2) {
[0]=>
array(2) {
["id"]=>
int(1000)
["name"]=>
string(3) "aaa"
}
[2]=>
array(2) {
["id"]=>
int(1002)
["name"]=>
string(3) "ccc"
}
}
*/