빈 어레이 항목을 건너뛰면서 어레이를 삽입하려면 어떻게 해야 합니까?
Perl의join()
빈 배열 값을 무시(건너뛰기), PHP의implode()
는 표시되지 않습니다.
배열이 있다고 가정합니다.
$array = array('one', '', '', 'four', '', 'six');
implode('-', $array);
수율:
one---four--six
(IMHO가 바람직함):
one-four-six
내가 찾고 있는 다른 기본 제공 기능은?아니면 커스텀으로 일하는 건가요?
다음을 사용할 수 있습니다.
콜백이 제공되지 않으면 (부울로 변환 참조)과 동일한 입력 엔트리가 모두 삭제됩니다.
implode('-', array_filter($array));
이 방법은 분명히 효과가 없습니다.0
(또는 평가되는 기타 값)false
( )을(를) 보관합니다.그 후, 독자적인 콜백 기능을 제공할 수 있습니다.
(함수가 사용자 정의 함수로 실행되고 있기 때문에) 빌트인이라고는 생각할 수 없지만 array_filter는 항상 사용할 수 있습니다.
예를 들어 다음과 같습니다.
function rempty ($var)
{
return !($var == "" || $var == null);
}
$string = implode('-',array_filter($array, 'rempty'));
삭제하다null
,false
,empty
끈을 매지만 보존하다0
func를 사용합니다."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 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"));
}
$array = ["one", NULL, "two", NULL, "three"];
$string = implode("-", array_diff($array, [NULL]));
echo $string;
돌아온다one-two-three
제가 찾은 정보에 따르면, 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_fileter()
여기서도 통용되는 방법인 것 같으며, 아마도 여전히 가장 강력한 답변일 것입니다.
단, 각 어레이 요소의 문자열에 "glue" 문자가 아직 존재하지 않음을 보증할 수 있는 경우(가장 실용적인 상황에서 지정됩니다.그렇지 않으면 어레이 내의 실제 데이터와 접착제를 구별할 수 없습니다).
$array = array('one', '', '', 'four', '', 'six');
$str = implode('-', $array);
$str = preg_replace ('/(-)+/', '\1', $str);
이것을 시험해 보세요.
if(isset($array)) $array = implode(",", (array)$array);
언급URL : https://stackoverflow.com/questions/5985401/how-can-i-implode-an-array-while-skipping-empty-array-items
'source' 카테고리의 다른 글
MySql에서 잘못된 조합 오류입니다. (0) | 2023.01.09 |
---|---|
MySQL 설정 및 Dockerfile 내 덤프 가져오기 (0) | 2023.01.09 |
SQL 키(MUL vs PRI vs UNI) (0) | 2023.01.09 |
지정된 날짜에서 연도 가져오기 php (0) | 2023.01.09 |
은행 정보를 데이터베이스에 저장하는 모범 사례 (0) | 2023.01.09 |