복붙노트

빈 배열 요소를 제거하십시오.

PHP

빈 배열 요소를 제거하십시오.

내 배열의 일부 요소는 사용자가 제출 한 내용에 따라 빈 문자열입니다. 나는 그 요소들을 제거해야합니다. 나는 이것을 가지고있다:

foreach($linksArray as $link)
{
    if($link == '')
    {
        unset($link);
    }
}
print_r($linksArray);

하지만 작동하지 않습니다. $ linksArray에는 여전히 빈 요소가 있습니다. 나는 또한 empty () 함수를 사용하여 시도했지만 결과는 같습니다.

해결법

  1. ==============================

    1.

    배열의 문자열을 처리 할 때 array_filter ()를 사용하면 편리합니다.

    print_r(array_filter($linksArray));
    

    콜백이 제공되지 않으면 배열의 모든 항목이 FALSE와 같습니다 (부울로 변환 참조). 따라서 정확한 문자열 '0'인 요소를 유지해야하는 경우 맞춤 콜백이 필요합니다.

    // PHP < 5.3
    print_r(array_filter($linksArray, create_function('$value', 'return $value !== "";')));
    
    // PHP 5.3 and later
    print_r(array_filter($linksArray, function($value) { return $value !== ''; }));
    
  2. ==============================

    2.

    array_filter를 사용하여 빈 요소를 제거 할 수 있습니다.

    $emptyRemoved = array_filter($linksArray);
    

    배열에 (int)가 0 인 경우 다음을 사용할 수 있습니다.

    $emptyRemoved = remove_empty($linksArray);
    
    function remove_empty($array) {
      return array_filter($array, '_remove_empty_internal');
    }
    
    function _remove_empty_internal($value) {
      return !empty($value) || $value === 0;
    }
    

    편집 : 어쩌면 귀하의 요소를 본질적으로 비어 있지만 하나 이상의 공백을 포함 ... array_filter 사용하기 전에 다음을 사용할 수 있습니다.

    $trimmedArray = array_map('trim', $linksArray);
    
  3. ==============================

    3.

    $linksArray = array_filter($linksArray);
    

    "콜백이 제공되지 않으면 FALSE와 같은 모든 입력 항목이 제거됩니다." - http://php.net/manual/en/function.array-filter.php

  4. ==============================

    4.

    이 주제에 대한 가장 일반적인 대답은 절대적으로 잘못되었습니다.

    다음 PHP 스크립트를 고려하십시오.

    <?php
    $arr = array('1', '', '2', '3', '0');
    // Incorrect:
    print_r(array_filter($arr));
    // Correct:
    print_r(array_filter($arr, 'strlen'));
    

    왜 이런거야? 단일 '0'문자를 포함하는 문자열은 부울 false로 평가되기 때문에 빈 문자열이 아니더라도 여전히 필터링됩니다. 그것은 버그 일 것입니다.

    내장 함수 strlen을 필터링 함수로 전달하면 비어 있지 않은 문자열에 대해 0이 아닌 정수가 반환되고 빈 문자열에는 0이 반환되기 때문에 작동합니다. 0이 아닌 정수는 부울로 변환 할 때 항상 true로 평가되고, 0 인 정수는 부울로 변환 될 때 항상 false로 평가됩니다.

    따라서 절대적이고 결정적인 정답은 다음과 같습니다.

    $arr = array_filter($arr, 'strlen');
    
  5. ==============================

    5.

        $myarray = array_filter($myarray, 'strlen');  //removes null values but leaves "0"
        $myarray = array_filter($myarray);            //removes all null values
    
  6. ==============================

    6.

    너는 할 수있어.

    array_filter($array)
    

    array_filter : "콜백이 제공되지 않으면 FALSE와 같은 입력 항목이 모두 제거됩니다." 즉, 값이 NULL, 0, '0', '', FALSE, array () 인 요소는 제거됩니다.

    다른 옵션은

    array_diff($array, array(''))
    

    NULL, ''및 FALSE 값을 갖는 요소를 제거합니다.

    희망이 도움이 :)

    다음은 그 예입니다.

    $a = array(0, '0', NULL, FALSE, '', array());
    
    var_dump(array_filter($a));
    // array()
    
    var_dump(array_diff($a, array(0))) // 0 / '0'
    // array(NULL, FALSE, '', array());
    
    var_dump(array_diff($a, array(NULL))) // NULL / FALSE / ''
    // array(0, '0', array())
    

    요약하면 다음과 같습니다.

  7. ==============================

    7.

    foreach($linksArray as $key => $link) 
    { 
        if($link === '') 
        { 
            unset($linksArray[$key]); 
        } 
    } 
    print_r($linksArray); 
    
  8. ==============================

    8.

    배열에서 빈 ( ""빈 문자열) 요소를 제거하는 또 다른 라이너입니다.

    $array = array_filter($array, create_function('$a','return $a!=="";'));
    

    주 :이 코드는 고의적으로 null, 0 및 false 요소를 유지합니다.

    또는 배열 요소를 먼저 자르고 싶을 수도 있습니다.

    $array = array_filter($array, create_function('$a','return trim($a)!=="";'));
    

    참고 :이 코드는 null 및 false 요소도 제거합니다.

  9. ==============================

    9.

    OP가 빈 문자열에 대해서만 이야기하기 때문에 가장 투표가 잘 된 대답은 잘못되었거나 적어도 완전히 사실이 아닙니다. 다음은 철저한 설명입니다.

    우선, 우리는 무엇이 빈 뜻인지에 동의해야합니다. 걸러내는 것을 의미합니까?

    빈 문자열 만 필터링하려면 다음과 같이하십시오.

    $filtered = array_diff($originalArray, array(""));
    

    엄격하게 false 값만 필터링하려면 콜백 함수를 사용해야합니다.

    $filtered = array_diff($originalArray, 'myCallback');
    function myCallback($var) {
        return $var === false;
    }
    

    콜백은 일부를 제외하고 "거짓"값을 필터링하려는 모든 조합에도 유용합니다. (예를 들어, 모든 null과 false 등을 필터링하여 0 만 남겨 둡니다.)

    $filtered = array_filter($originalArray, 'myCallback');
    function myCallback($var) {
        return ($var === 0 || $var === '0');
    }
    

    세 번째와 네 번째 경우는 (우리의 목적은 마침내) 동등한 것이며, 기본값으로 사용하면됩니다.

    $filtered = array_filter($originalArray);
    
  10. ==============================

    10.

    $a = array(1, '', '', '', 2, '', 3, 4);
    $b = array_values(array_filter($a));
    
    print_r($b)
    
  11. ==============================

    11.

    숫자 배열로 작업하고 빈 요소를 제거한 후 배열의 색인을 다시 생성해야하는 경우 array_values ​​함수를 사용하십시오.

    array_values(array_filter($array));
    

    참고 자료 : PHP reindex array?

  12. ==============================

    12.

    다음 스크립트를 사용하여 배열에서 빈 요소를 제거합니다.

    for ($i=0; $i<$count($Array); $i++)
      {
        if (empty($Array[$i])) unset($Array[$i]);
      }
    
  13. ==============================

    13.

    다차원 배열의 경우

    $data = array_map('array_filter', $data);
    $data = array_filter($data);
    
  14. ==============================

    14.

    배열 값을 (문자열) 0으로 유지하려면이 작업을 수행해야했습니다.

    $url = array_filter($data, function ($value) {
      return (!empty($value) || $value === 0 || $value==='0');
    });
    
  15. ==============================

    15.

    이것은 내 제안 코드입니다 :

    $myarray =  array_values(array_filter(array_map('trim', $myarray), 'strlen'));
    

    나는 array_filter를 사용하는 것이 좋지만 충분하지는 않다고 생각한다. 왜냐하면 값은 공백과 \ n 같은 것이기 때문에 ... 배열에 유지하는 것이 좋지 않다.

    그래서 나는 당신이 array_filter와 array_map을 혼합하여 사용할 것을 제안한다.

    array_map은 트리밍, array_filter는 빈 값 제거, strlen은 0 값 유지, array_values는 다시 인덱싱을위한 것입니다.

    $myarray = array("\r", "\n", "\r\n", "", " ", "0", "a");
    
    // "\r", "\n", "\r\n", " ", "a"
    $new1 = array_filter($myarray);
    
    // "a"
    $new2 = array_filter(array_map('trim', $myarray));
    
    // "0", "a"
    $new3 = array_filter(array_map('trim', $myarray), 'strlen');
    
    // "0", "a" (reindex)
    $new4 = array_values(array_filter(array_map('trim', $myarray), 'strlen'));
    
    var_dump($new1, $new2, $new3, $new4);
    
    array(5) {
      [0]=>
    " string(1) "
      [1]=>
      string(1) "
    "
      [2]=>
      string(2) "
    "
      [4]=>
      string(1) " "
      [6]=>
      string(1) "a"
    }
    array(1) {
      [6]=>
      string(1) "a"
    }
    array(2) {
      [5]=>
      string(1) "0"
      [6]=>
      string(1) "a"
    }
    array(2) {
      [0]=>
      string(1) "0"
      [1]=>
      string(1) "a"
    }
    

    http://phpio.net/s/5yg0

  16. ==============================

    16.

    $out_array = array_filter($input_array, function($item) 
    { 
        return !empty($item['key_of_array_to_check_whether_it_is_empty']); 
    }
    );
    
  17. ==============================

    17.

    루프에 대한 대안을 제공하고 싶습니다. 또한 키의 틈을 처리하고 싶습니다 ...

    필자의 경우에는 작업이 완료되면 순차 배열 키를 유지하기를 원했습니다. 홀수 키뿐만 아니라 친숙하지 않은 키가 보이게 설정되었습니다.

    나는 이것 같이 더 많은 것을 찾고 있었다 : http://gotofritz.net/blog/howto/removing-empty-array-elements-php/

    array_filter와 array_slice의 조합이 트릭을 수행합니다.

    $ example = array_filter ($ example); $ example = array_slice ($ example, 0);

    효율성이나 벤치 마크에 대한 아이디어는 없지만 효과가 있습니다.

  18. ==============================

    18.

    function trim_array($Array)
    {
        foreach ($Array as $value) {
            if(trim($value) === '') {
                $index = array_search($value, $Array);
                unset($Array[$index]);
            }
        }
        return $Array;
    }
    
  19. ==============================

    19.

    foreach($arr as $key => $val){
       if (empty($val)) unset($arr[$key];
    }
    
  20. ==============================

    20.

    array_filter 함수를 사용하여 빈 값을 제거하십시오.

    $linksArray = array_filter($linksArray);
    print_r($linksArray);
    
  21. ==============================

    21.

    한 줄만 : 업데이트 (@Suther 덕분에) :

    $array_without_empty_values = array_filter($array);
    
  22. ==============================

    22.

    $my = ("0"=>" ","1"=>"5","2"=>"6","3"=>" ");   
    
    foreach ($my as $key => $value) {
        if (is_null($value)) unset($my[$key]);
    }
    
    foreach ($my as $key => $value) {
        echo   $key . ':' . $value . '<br>';
    } 
    

    산출

  23. ==============================

    23.

    빈 배열 요소를 제거하십시오.

    function removeEmptyElements(&$element)
    {
        if (is_array($element)) {
            if ($key = key($element)) {
                $element[$key] = array_filter($element);
            }
    
            if (count($element) != count($element, COUNT_RECURSIVE)) {
                $element = array_filter(current($element), __FUNCTION__);
            }
    
            return $element;
        } else {
            return empty($element) ? false : $element;
        }
    }
    
    $data = array(
        'horarios' => array(),
        'grupos' => array(
            '1A' => array(
                'Juan' => array(
                    'calificaciones' => array(
                        'Matematicas' => 8,
                        'Español' => 5,
                        'Ingles' => 9,
                    ),
                    'asistencias' => array(
                        'enero' => 20,
                        'febrero' => 10,
                        'marzo' => '',
                    )
                ),
                'Damian' => array(
                    'calificaciones' => array(
                        'Matematicas' => 10,
                        'Español' => '',
                        'Ingles' => 9,
                    ),
                    'asistencias' => array(
                        'enero' => 20,
                        'febrero' => '',
                        'marzo' => 5,
                    )
                ),
            ),
            '1B' => array(
                'Mariana' => array(
                    'calificaciones' => array(
                        'Matematicas' => null,
                        'Español' => 7,
                        'Ingles' => 9,
                    ),
                    'asistencias' => array(
                        'enero' => null,
                        'febrero' => 5,
                        'marzo' => 5,
                    )
                ),
            ),
        )
    );
    
    $data = array_filter($data, 'removeEmptyElements');
    var_dump($data);
    

    ¡ 작동합니다!

  24. ==============================

    24.

    이 시도 ** **예

    $or = array(
            'PersonalInformation.first_name' => $this->request->data['User']['first_name'],
            'PersonalInformation.last_name' => $this->request->data['User']['last_name'],
            'PersonalInformation.primary_phone' => $this->request->data['User']['primary_phone'],
            'PersonalInformation.dob' => $this->request->data['User']['dob'],
            'User.email' => $this->request->data['User']['email'],
        );
    
    
    
     $or = array_filter($or);
    
        $condition = array(
            'User.role' => array('U', 'P'),
            'User.user_status' => array('active', 'lead', 'inactive'),
            'OR' => $or
        );
    
  25. ==============================

    25.

    귀하의 방법에 따라, 당신은 단지 다른 배열에 그 요소를 잡아 다음과 같이 그 하나를 사용할 수 있습니다,

    foreach($linksArray as $link){
       if(!empty($link)){
          $new_arr[] = $link
       }
    }
    
    print_r($new_arr);