PHP array_filter 사용법
Dev

PHP array_filter 사용법

2018. 2. 1. 15:27

뜬금없이 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를 한번 더 이해하게 된 소.. 소.. 소... 소중한 시간이었다.

반응형