配列の中から true で無いものを取り除くには第 2 引数を省略した array_filter() を使えばできます。
ただし、数値の 0 まで消されてしまったりするので、条件を細かく指定する場合、無名関数を作るとコンパクトに収まります。
<?php $arr = array('test', '', false, array(), 0, null, 'sample'); $arr = array_filter($arr, function($value) {return (!empty($value) || $value === 0);} );
結果
Array ( [0] => test [4] => 0 [6] => sample )
PHP 5.3 から無名関数(クロージャ)が使えるようになりましたが、それより古い場合は create_function() を使えば同様の処理ができます。
$arr = array_filter($arr, create_function('$value', 'return (!empty($value) || $value === 0);') );
要素が取り除かれても添字は保持されているので、再度詰めて振り直すには array_merge($arr) を使います。
この場合添字が文字列の場合保持され、数値の場合は振り直されます。
連想配列を無視して振り直す場合は array_values() でも可能です。
Similar Posts:
- PHP で XML の内容を取得する(DOM, XPath)
- [PHP]ユーザー定義関数の出力結果を任意の変数に格納する
- [PHP]よくあるエラーメッセージの原因と対処法 2
- [PHP]htmlspecialchars()を行った上でprintf()する
- [PHP]ZipArchiveクラスを使ったファイルのZip圧縮と展開(解凍)
- [PHP]マジックメソッドを使ったアクセサ(__get, __set)
- [PHP]よくあるエラーメッセージの原因と対処法 1
- [PHP]同じ名前のファイルが存在するときは番号(連番)を付ける