빈 배열 항목을 건너뛰는 동안 배열을 어떻게 파열시킬 수 있나요?
문제
펄의 join()
빈 배열 값을 무시(건너뛰기)합니다.PHP의 implode()
나타나지 않습니다.
배열이 있다고 가정합니다.
$array = array('one', '', '', 'four', '', 'six');
implode('-', $array);
수익률:
one---four--six
(IMHO가 바람직함) 대신:
one-four-six
내가 찾고 있는 동작을 포함하는 다른 내장 기능이 있나요?아니면 커스텀 작업이 될까요?
해결책
콜백 이 제공되지 않은 경우 입력 의 모든 항목이
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
, 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 )
내가 찾을 수있는 것을 바탕으로, 나는 기회가 말할 것입니다.그러나 당신은 아마 이것의 줄을 따라 무언가를 할 수 있습니다 :
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_fileter()
는 여기에서 허용되는 방식 인 것으로 보이며, 아마도 가장 강력한 답변은 TBH입니다.
그러나 "접착제"문자가 각 배열 요소의 문자열에 존재하지 않는다는 것을 보장 할 수 있다면 (그렇지 않으면 그렇지 않을 것입니다.배열의 실제 데이터에서 접착제를 구별 할 수 있음) :
$array = array('one', '', '', 'four', '', 'six');
$str = implode('-', $array);
$str = preg_replace ('/(-)+/', '\1', $str);
. 시도 :
if(isset($array)) $array = implode(",", (array)$array);
.