2010-02-27 5 views
1
foreach($array as $key => $value) 
     if (strlen($value) == 0) 
    unset($array[$key]); 

너무 많은 기본 제공 배열 기능이 있습니까?이렇게하는 PHP 함수가 내장되어 있습니까?

+0

"이"가 의미하는 것을 정의해야합니다. – pixeline

+0

[해당 값을 기반으로 배열에서 요소를 제거 할 수 있습니까?] (http://stackoverflow.com/questions/2169669/remove-element-from-array-based-on-its-value) – Gordon

답변

12

난 당신이을 array_filter를 사용할 수있다 (인용) 일 의 종류를 할 가정 : 콜백 함수로 전달 입력 배열의 각 값 이상

로 반복합니다.
콜백 함수 이 true을 반환하면 입력의 현재 값이 배열의 결과로 반환됩니다.
배열 키가 보존됩니다.

: 그리고 콜백이 제공되지 않으면

, FALSE동일한 모든 입력 항목 제거 될 것이다 ( converting to boolean 참조). 코드의이 부분 같은 것을 사용하여 예를 들어


:

$array = array(
    'test' => 'glop', 
    'a' => 123, 
    'b' => '', 
    'c' => 'blah', 
    'd' => '', 
); 

$array = array_filter($array); 
var_dump($array); 

다음과 같은 출력을 얻을 것이다 : 나는 콜백 함수를 사용하지 않았다

array 
    'test' => string 'glop' (length=4) 
    'a' => int 123 
    'c' => string 'blah' (length=4) 

을, 여기 - "빈 값"이 모두 제거되었습니다. ;; 까다로운 부분은 그 값으로 0을 가진 엔트리를 가지고 있었다면, 그것도 제거되었을 것입니다 ...

상황에 따라, 그것은 만족 스럽거나 그렇지 않을 것입니다. 특정 콜백 함수를 사용하여 원하는 것을 정확히 수행하고 필터링 된 내용을 효과적으로 제어 할 수 있습니까?

$array = array(
    'test' => 'glop', 
    'a' => 0, 
    'b' => '', 
    'c' => 'blah', 
    'd' => '', 
); 

function my_function($a) { 
    if ($a === '') { 
     return false; 
    } 
    return true; 
} 

$array = array_filter($array, 'my_function'); 
var_dump($array); 

는 (배열의 'a' => 0 라인을 참고)

그리고 지금 우리가 얻을 :

array 
    'test' => string 'glop' (length=4) 
    'a' => int 0 
    'c' => string 'blah' (length=4) 


그리고 여기가 콜백 함수와 예제입니다 콜백 함수를 사용하면(여기서는 정확히 빈 문자열을 포함하고 형식 변환이없는 행)을 필터링하여 더 명확하게 지정해야합니다.

관련 문제