配列で特定の要素を削除

備忘録代わりに書いておきます。

phpで特定の要素を一気に削除するみたいな関数がなかったので、解決策をメモしておきます。

例えば、下みたいな配列から、要素が1の要素を全て一気に削除したい場合。

Array(1,2,3,1,2,1,2)

方法は下みたいな感じで、今回は対応しました。

<?php
$array = Array(1,2,3,1,2,1,2) ;
print_r($array) ;
$result = array_filter(
    $array ,
    create_function('$val', 'return ($val==1) ? FALSE : $val ; ') 
) ;
print_r($result) ;
?>

実行結果

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 1
    [4] => 2
    [5] => 1
    [6] => 2
)
Array
(
    [1] => 2
    [2] => 3
    [4] => 2
    [6] => 2
)

このarray_filter関数は、第2引数のコールバック関数の結果がFALSEだった場合に、$resultにはその値が入らないようになるそうです。

う〜ん。。。でも、他にももっとたくさんのやり方がありそうだな。。。しかも、このやり方だと、配列のインデックスの順番がおかしくなるしな。。。まぁ、もしもインデックスの順番を再構築したい場合は、array_values関数を使えばよいかな。もっとよい方法が見つかったら、追記しよ。