回答:
使用できますarray_filter()
:
コールバックが指定されていない場合、等しい(ブール値への変換を参照)に等しい入力のすべてのエントリが削除されます。
FALSE
implode('-', array_filter($array));
配列に0
(またはに評価されるその他の値false
)があり、それを保持したい場合、明らかにこれは機能しません。ただし、独自のコールバック関数を提供できます。
false
、そして0
また捨てられますか?
empty
、使えば使うほど、また扱います0
とfalse
としてfalse
ところで(と、それを削除します)。
array_filter()
デフォルトのフィルタによって、すべてのオフfalse
、null
空の文字列(「」)と0
。
false
:空の配列、0.0
および"0"
。
(関数がユーザー定義関数で実行されているため)組み込みとは見なせないかもしれませんが、常にarray_filterを使用できます。
何かのようなもの:
function rempty ($var)
{
return !($var == "" || $var == null);
}
$string = implode('-',array_filter($array, 'rempty'));
empty
すると、コールバックをまったく渡さないのと同じ効果があります。編集:戻り値を否定する必要があります。そうしないと、空の要素のみが返されます;)(実際にempty
以前と同じように使用することも間違っていました)
implode('-', array_filter($ary, create_function('$a', 'return $a!="";')));
フィルターを実装する方法は、「空」と見なされるものにのみ依存します。
function my_filter($item)
{
return !empty($item); // Will discard 0, 0.0, '0', '', NULL, array() of FALSE
// Or...
return !is_null($item); // Will only discard NULL
// or...
return $item != "" && $item !== NULL; // Discards empty strings and NULL
// or... whatever test you feel like doing
}
function my_join($array)
{
return implode('-',array_filter($array,"my_filter"));
}
私が見つけることができるものに基づいて、可能性はあると思います、そのために組み込まれたPHPを使用する方法は実際にはありません。しかし、おそらくこれに沿って何かをすることができます:
function implode_skip_empty($glue,$arr) {
$ret = "";
$len = sizeof($arr);
for($i=0;$i<$len;$i++) {
$val = $arr[$i];
if($val == "") {
continue;
} else {
$ret .= $arr.($i+1==$len)?"":$glue;
}
}
return $ret;
}
$array = ["one", NULL, "two", NULL, "three"];
$string = implode("-", array_diff($array, [NULL]));
echo $string;
戻り値 one-two-three
これを試して:
if(isset($array)) $array = implode(",", (array)$array);
isset()
入力配列をarray
元の投稿の懸念事項に対処する方法またはキャストする方法がわかりませんか?
join
未定義の要素をスキップしません。実際には、警告が表示されます。$a[0]="a"; $a[2]="c"; say join "-",@a;
とを表示Use of uninitialized value within @a in join or string
しa--c
ます。join '-', grep !defined, ...
未定義の値をスキップするために使用できます。grep !length,
空の文字列を実行します。