PHP array_filter 사용법
뜬금없이 array_filter
의 사용법을 게다가 PHP의 사용법을 정리하는 이유는 PHP 특성상의 문제로 약간 의도와 다르게 동작하는 것이 있어서다.
$values = ['a','b','c','d'];
echo json_encode(
array_filter($values, function($value) {
return $value != 'b';
})
);
내가 하고 싶었던 일은 단순히 array에서 특정값을 제외하기를 원했다. foreach
를 돌려서 빼내도 되지만 가급적 미리 제공되는 함수를 써보려고 했다. 예상한 결과는 당연하게도 ['a','c','d']
다. 그런데 결과는 어떻게 나왔을까?
{"0":"a","2":"c","3":"d"}
이런 결과가 나오는 이유는 PHP에서 array는 object이기도 하기 때문이었다.
$values = [1,2,3];
$values = [
'0' => 1,
'1' => 2,
'2' => 3
];
이 두개의 array는 PHP에서는 같은 데이터다. 하지만 key가 0부터 순서대로 증가하지 않는다면 json_encode의 결과에서는 object로 다르게 나타난다. 요런 다소 황당한 이유때문에 array_filter의 결과로 array를 원한다면 key를 빼고 value들로만 다시 array를 만들어야 한다. (이럴거면 그냥 foreach 쓰지 그랬냐!! ㅠㅠ)
$values = ['a','b','c','d'];
echo json_encode(
array_values(array_filter($values, function($value) {
return $value != 'b';
}))
);
// result: ['a','c','d']
PHP를 한번 더 이해하게 된 소.. 소.. 소... 소중한 시간이었다.
반응형