답변:
다음을 사용할 수 있습니다 array_filter()
.
어떠한 경우 콜백이 제공되지 않으며, 모든 항목의 입력은 동일
FALSE
(참조 부울로 변환 제거한다).
implode('-', array_filter($array));
배열에 0
(또는로 평가되는 다른 값 false
)이 있고 유지하려는 경우 분명히 작동하지 않습니다 . 그러나 그런 다음 자체 콜백 함수를 제공 할 수 있습니다.
false
, 그리고 0
또한 버려지는 것을 의미 합니까?
empty
당신이 그것을 사용할 때, 또한 취급 0
과 false
같은 false
BTW (및 제거).
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_fileter()
여기에서 받아 들여지는 방법으로 보이며 아마도 여전히 가장 강력한 대답 tbh 일 것입니다.
그러나 "glue"문자가 각 배열 요소의 문자열에 이미 존재하지 않는다는 것을 보장 할 수있는 경우 다음도 작동합니다 (가장 실제적인 상황에서 제공됩니다. 그렇지 않으면 구별 할 수 없습니다). 배열의 실제 데이터에서 얻은 접착제) :
$array = array('one', '', '', 'four', '', 'six');
$str = implode('-', $array);
$str = preg_replace ('/(-)+/', '\1', $str);
이 시도:
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,
빈 문자열을 수행합니다.