すぐ忘れるので忘れないように備忘録
~~~
$array = array(“”, “”, “hoge”);
$array = array_filter($array);
var_dump($array);
~~~
~~~
array(1) { [2]=> string(4) “hoge” }
~~~
keyは保持されたまま要素が消せるのでなにかと使うのにすぐ忘れます。。
すぐ忘れるので忘れないように備忘録
~~~
$array = array(“”, “”, “hoge”);
$array = array_filter($array);
var_dump($array);
~~~
~~~
array(1) { [2]=> string(4) “hoge” }
~~~
keyは保持されたまま要素が消せるのでなにかと使うのにすぐ忘れます。。
コメント
これだと0という数値や”0″という文字、falseもnullも消されてしまいませんかね?
$array = array("", "", "hoge",0,"0",false,null);
$array = array_filter($array);
var_dump($array);
array
2 => string ‘hoge’ (length=4)
そうですね、残念ながらというかPHPは0の要素やnullの要素は空の要素とみなしてしまうので
内部的にempty()で判定しているんじゃないかと思います
えーとarray_filter()関数は第2引数にコールバック関数を指定できるので、その関数で文字列が空かどうか判定してあげないとダメなのでは?という話でした。
http://php.net/manual/ja/function.array-filter.php
なので下記サイトにあるように’strlen’とかを指定すれば文字列の長さが0の物を削除できて良いかと思います。この場合でも要素が配列の場合とかはまた微妙な気はしますが。
http://suin.asia/2009/03/13/array-filter.html
あー、なるほど。
そこまで厳密に使おうと思ってメモってたわけでもないので大丈夫ですがPHP5.3以降なら無名関数使えばちゃんとすることも出来そうですね
そうですね。
厳密にやりたかったら無名関数は良いですね。