2012-03-05 2 views
5

배열에 약 12 ​​개의 잠재적 인 키/값 쌍이 있습니다. 그것은 _POST/_GET을 기반으로합니다PHP remove empty, null 키/값을 유지하면서 배열 키/값을 그렇지 않으면 비어 있지 않음/null

키는 0-n과 같이 숫자가 아니며 해당 값이있는 키를 유지해야합니다. 내 문제는 값이 null, 비어 있거나 ''와 같은 곳에 키가 전달된다는 것입니다. 그 사건에서 나는 배열을 처리하기 전에 그 키들을 잘라 내고 싶다. 무언가없이 선을 따라 달리면서 내 대본을 깨뜨릴 것입니다.

이제는이 기능을 만들거나 찾았습니다. (잠시 동안 내 무기고에 어떤 것이 있는지 기억하지 못합니다.) 내가 사랑을 무엇

function remove_array_empty_values($array, $remove_null_number = true) 
    { 
     $new_array = array(); 
     $null_exceptions = array(); 
     foreach($array as $key => $value) 
     { 
      $value = trim($value); 
      if($remove_null_number) 
      { 
       $null_exceptions[] = '0'; 
      } 
      if(!in_array($value, $null_exceptions) && $value != "") 
      { 
       $new_array[] = $value; 
      } 
     } 
     return $new_array; 
    } 

그러나이 윈 키 값을 가질 수 배열 잘 작동하고 내가 결정하는 값뿐만 아니라 키에 의존하지 오전 뭐죠 무엇을 어디에,이 매우 유사하다 언제. 위와 같이하면 기본적으로 모든 것을 제거하고 배열을 다시 빌드합니다. 내가 갇혀있는 부분은 위의 기능을 모방하는 방법을 알아 내려고하지만 필요한 키를 유지하는 곳입니다.

+1

내가 요구 사항을 오해하지 않는 한, 즉 ['array_filter()'] (HTTP의 정확한 기능은 다음과 같습니다 //us3.php.net/manual/en/function.array-filter.php) –

+0

[PHP 배열에서 제로 값 제거] 가능한 중복 (http://stackoverflow.com/questions/2287404/remove-zero- values ​​from-a-ph-array) – hakre

답변

10

필요하시면, 당신은 array_filter()를 사용하거나 같은 것을 할 수 있습니다 만약 내가 제대로 이해 :

foreach($myarray as $key=>$value) 
{ 
    if(is_null($value) || $value == '') 
     unset($myarray[$key]); 
} 
+1

더 포괄적이기 위해'if (empty ($ value))'를 사용할 수 있습니다. –

+0

@GeorgeCummins : 동의합니다. 옵션입니다. 내부적으로, 그것은 똑같은 일을합니다 - 그렇습니까? –

+0

'empty()'는 0, false, "0", 0.0, 빈 배열 등을 검사하기 때문에 더 포괄적입니다. 또한 읽기와 유지가 조금 더 간단합니다. –

4

array_filter은 필요한 기능을 정확히 수행하는 내장 기능입니다. 대부분의 경우, 어떤 값을 유지하고 어느 값을 제거할지 결정하는 자신 만의 콜백을 제공해야합니다. 기능 설명에 따라 키가 자동으로 보존됩니다. 예를 들어

:

// This callback retains values equal to integer 0 or the string "0". 
// If you also wanted to remove those, you would not even need a callback 
// because that is the default behavior. 
function filter_callback($val) { 
    $val = trim($val); 
    return $val != ''; 
} 

$filtered = array_filter($original, 'filter_callback'); 
6

당신은 빠른 방법을 원하는 경우 NULL, FALSE 및 빈 문자열 ("")을 제거하지만 값을 0으로두면 콜백 함수로 표준 PHP 함수 strlen을 사용할 수 있습니다.

// removes all NULL, FALSE and Empty Strings but leaves 0 (zero) values 
$result = array_filter($array, 'strlen'); 

출처 : 핵심 변수 http://php.net/manual/en/function.array-filter.php#111091

0

사용 +1 배열에 널 (null) 키를 건너 뛸

foreach($myarray as $key=>$value) 
{ 
    echo $key+1; //skip null key 
} 
관련 문제