빈 배열 항목을 건너뛰는 동안 배열을 어떻게 파열시킬 수 있나요?

StackOverflow https://stackoverflow.com/questions/5985401

  •  12-11-2019
  •  | 
  •  

문제

펄의 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, 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);
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top