[php] 빈 배열 항목을 건너 뛰면서 배열을 내파하려면 어떻게해야합니까?

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를 사용하십시오. falseempty0strlen

$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