PHPで配列要素を簡単に削除する方法を教えてもらったのでメモとして残しておきます。(@memory-agape ちゃんありがとう!)
環境
- PHP5系
やりたいこと
以下のように、特定の値(今回の場合は'c'
)に一致する配列要素だけを削除する。
// 元の配列
$array1 = array('a', 'b', 'c', 'd');
//$array1から'c'だけを削除した配列がほしい
array('a', 'b', 'd');
実現方法
PHP Doucmentを全部読めていない初心者なので、一瞬「for文で実現するしかないのか...?」と暗澹たる思いでしたが、array_diff
という標準ライブラリで実現できました。
// 元の配列
$array1 = array('a', 'b', 'c', 'd');
// 除外対象の値
$value = 'c';
$result = array_diff($array1, array($value));
var_dump($result);// 'c'を除いた配列が表示される。
CLIでも簡単に確認できます。
$php -r "var_dump(array_diff(array('a','b','c','d'),array('c')));"
array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[3]=>
string(1) "d"
}
注意点として、生成された配列のindex
は0からの連番ではない可能性があります。(上記の例だと$result[2]
が無い)
連番に戻したい場合は、array_values
関数を使うと良いでしょう。(@Hirakuさん ありがとうございます!)
$php -r "var_dump(array_values(array_diff(array('a','b','c','d'),array('c'))));"
array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "d"
}