source

빈 어레이 항목을 건너뛰면서 어레이를 삽입하려면 어떻게 해야 합니까?

factcode 2023. 1. 9. 21:13
반응형

빈 어레이 항목을 건너뛰면서 어레이를 삽입하려면 어떻게 해야 합니까?

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끈을 매지만 보존하다0func를 사용합니다."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

반응형