このパターンは「配列の要素が全て文字列だと保証できる」場合以外では推奨できない。適用しやすいのは、explode()
の返り値。
逆に、適用してはいけないのは $_GET
, $_POST
, $_REQUEST
など(要素に配列が含まれうる)。
<?php
$path = '/hoge/fuga/piyo';
$split = explode('/', $path);
// => ['', 'hoge', 'fuga', 'piyo']
$split = array_filter(explode('/', $path), 'strlen');
// => ['hoge', 'fuga', 'piyo']
申しわけ程度に説明
-
strlen()
は文字列の長さ(バイト数)を返す変哲もない函数 -
array_filter()
は配列の各要素をコールバック函数に適用し、true
を返した値のみから構成される配列を返す - PHPの数値型は
0
がfalse
、それ以外がtrue
に相当する
追記
忘れてたけど、array_filter()
だとキーと値の対応は維持されたままなので、純粋な配列として扱ひたいときはarray_values()
で振り直すと良いですよ。
つまりこんな感じ。
<?php
$split = array_values(array_filter(explode('/', $path), 'strlen'));
連想配列として扱っておきたい場合は特に何もしなくていい。