얼마나 많은 프로그래머가 array_values(array_filter())
자신의 코드에 메소드를 복사 / 붙여 넣었는지 걱정합니다. 얼마나 많은 프로그래머가 array_filter의 탐욕 때문에 무의식적으로 문제를 겪었는지 궁금합니다. 더 나쁜 것은 얼마나 많은 사람들이이 함수가 배열에서 너무 많은 값을 제거한다는 사실을 발견하지 못한 것입니다.
NULL
배열에서 요소를 제거 하고 키를 다시 인덱싱하는 두 부분으로 구성된 프로세스에 대한 더 나은 대안을 제시하겠습니다 .
그러나 먼저 욕심 많은 성격 array_filter()
과 이것이 당신의 프로젝트를 조용히 망치는 방법을 강조하는 것이 매우 중요합니다 . 다음은 문제를 노출 할 혼합 값이있는 배열입니다.
$array=['foo',NULL,'bar',0,false,null,'0',''];
대문자 / 소문자에 관계없이 Null 값이 제거됩니다.
그러나 array_values () & array_filter ()를 사용할 때 배열에 무엇이 남아 있는지 살펴보십시오 .
array_values(array_filter($array));
출력 배열 ($ array) :
array (
0 => 'foo',
1 => 'bar'
)
// All empty, zero-ish, falsey values were removed too!!!
이제 array_walk () 및 is_null () 을 사용하여 새 필터링 된 배열을 생성하는 내 메서드로 얻은 결과를 살펴보십시오 .
array_walk($array,function($v)use(&$filtered){if(!is_null($v)){$filtered[]=$v;}});
더 쉽게 읽고 설명하기 위해 여러 줄에 걸쳐 작성할 수 있습니다.
array_walk( // iterate each element of an input array
$array, // this is the input array
function($v)use(&$filtered){ // $v is each value, $filter (output) is declared/modifiable
if(!is_null($v)){ // this literally checks for null values
$filtered[]=$v; // value is pushed into output with new indexes
}
}
);
출력 배열 ($ filter) :
array (
0 => 'foo',
1 => 'bar',
2 => 0,
3 => false,
4 => '0',
5 => '',
)
내 방법을 사용하면 다시 인덱싱 된 키, 모든 비 null 값 및 null 값 없음을 얻을 수 있습니다. 모든 어레이 널 필터링 요구 사항을 충족하는 깨끗하고 휴대 가능하며 신뢰할 수있는 원 라이너입니다. 다음은 데모 입니다.
마찬가지로, 빈, 거짓 및 null 요소 (0 유지)를 제거하려는 경우 다음 네 가지 메서드가 작동합니다.
var_export(array_values(array_diff($array,[''])));
또는
var_export(array_values(array_diff($array,[null])));
또는
var_export(array_values(array_diff($array,[false])));
또는
var_export(array_values(array_filter($array,'strlen')));
산출:
array (
0 => 'foo',
1 => 'bar',
2 => 0,
3 => '0',
)
마지막으로, 언어 구문의 구문을 선호하는 사람이라면 한정 값을 새 배열에 밀어 넣어 새 인덱스를 발행 할 수도 있습니다.
$array=['foo', NULL, 'bar', 0, false, null, '0', ''];
$result = [];
foreach ($array as $value) {
if (strlen($value)) {
$result[] = $value;
}
}
var_export($result);