PHPで配列の値が空の要素を削除したい時

PHP プログラミング

すぐ忘れるので忘れないように備忘録

~~~
$array = array(“”, “”, “hoge”);
$array = array_filter($array);
var_dump($array);
~~~

~~~
array(1) { [2]=> string(4) “hoge” }
~~~

keyは保持されたまま要素が消せるのでなにかと使うのにすぐ忘れます。。

PHP: array_filter – Manual

コメント

  1. chobitnet より:

    これだと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()で判定しているんじゃないかと思います

      • chobitnet より:

        えーと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以降なら無名関数使えばちゃんとすることも出来そうですね

          • chobitnet より:

            そうですね。
            厳密にやりたかったら無名関数は良いですね。

タイトルとURLをコピーしました