Perl join()
은 빈 배열 값을 무시 (건너 뛰기)합니다. PHP는 implode()
보이지 않습니다.
배열이 있다고 가정합니다.
$array = array('one', '', '', 'four', '', 'six');
implode('-', $array);
수율 :
one---four--six
대신 (IMHO 선호) :
one-four-six
내가 찾고있는 동작이있는 다른 내장 기능이 있습니까? 아니면 맞춤형 직업이 될까요?
답변
다음을 사용할 수 있습니다 array_filter()
.
어떠한 경우 콜백이 제공되지 않으며, 모든 항목의 입력은 동일
FALSE
(참조 부울로 변환 제거한다).
implode('-', array_filter($array));
배열에 0
(또는로 평가되는 다른 값 false
)이 있고 유지하려는 경우 분명히 작동하지 않습니다 . 그러나 그런 다음 자체 콜백 함수를 제공 할 수 있습니다.
답변
함수가 사용자 정의 함수로 실행되기 때문에 내장 된 것으로 간주 할 수 없다고 가정하지만 항상 array_filter를 사용할 수 있습니다 .
다음과 같은 것 :
function rempty ($var)
{
return !($var == "" || $var == null);
}
$string = implode('-',array_filter($array, 'rempty'));
답변
필터를 구현하는 방법은 “비어 있음”에 따라 달라집니다.
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"));
}
답변
,, 문자열 을 제거 null
하고 보존 하려면 func를 사용하십시오. ‘ ‘false
empty
0
strlen
$arr = [null, false, "", 0, "0", "1", "2", "false"];
print_r(array_filter($arr, 'strlen'));
다음을 출력합니다.
//Array ( [3] => 0 [4] => 0 [5] => 1 [6] => 2 [7] => false )
답변
내가 찾을 수있는 것을 바탕으로, 나는 그것을 위해 내장 된 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;
}
답변
이 시도:
$result = array();
foreach($array as $row) {
if ($row != '') {
array_push($result, $row);
}
}
implode('-', $result);
답변
$array = ["one", NULL, "two", NULL, "three"];
$string = implode("-", array_diff($array, [NULL]));
echo $string;
보고 one-two-three