php array_map / array_walk / array_filter 의 차이점
array_map
배열의 각 요소에 대한 함수를 호출하는 foreach 루프로 생각하면 안됩니다.
배열의 각 요소에 독립적으로 함수를 적용하는 것으로 생각해야합니다.
array_walk
데이터 배열을 처리하는 것과 정확히 반대되는 방식입니다.
별도로 각 항목을 처리하는 대신 상태 ( &$userdata )를 사용하여 항목을 편집 할 수 있습니다 (foreach 루프와 비슷 함).
항목에 $funcname 적용될 때마다 프로그램의 전역 상태가 변경 될 수 있으므로 항목을 올바르게 처리하는 한 가지 올바른 방법이 필요합니다.
아래 예제는 배열의 키와 값을 가져와서 기존배열을 변경하는 예제입니다.
기본배열의 값을 변경이 가능한 이유는 &$v 때문에 가능한거죠.
주의: 배열의 값만 변경 될 수 있습니다. 그 구조는 변경 될 수 없습니다.
1 2 3 4 5 | $arr = ['aa','bb','cc ','dd']; array_walk($arr, function(&$v, $k) { $v = $k.' is key => '.$v.' is value'; }); print_r($arr); | cs |
1 2 3 4 5 6 7 8 | Array ( [0] => 0 is key => aa is value [1] => 1 is key => bb is value [2] => 2 is key => cc is value [3] => 3 is key => dd is value ) | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <?php $string ="16-OCT-2018 to 20-OCT-2018"; $first_array = explode("to", $string); array_walk($first_array, function(&$item) { $item = explode('-', $item); }); print_r($first_array); Array ( [0] => Array ( [0] => 16 [1] => OCT [2] => 2018 ) [1] => Array ( [0] => 20 [1] => OCT [2] => 2018 ) ) | cs |
array_filter
콜백 함수를 사용하여 배열 요소 필터링 한다라고 되어있는데
도대체 무슨 얘길 하는질 모르겠습니다.
다시 쉬운말로 풀이해보자면 배열긔 각 값을 반복하여 콜백함수에 전달하는데요
콜백함수가 true 일때만 현재값을 배열로 반환하는것입니다.
중요한건 배열의 키값은 보존이 됩니다.
예를 들어보겠습니다.
1 2 | $arr = [0,1,2,33,'','text']; print_r(array_filter($arr)); | cs |
위와값이 배열값이 있는데 아래결과를 보면 0(0번키)값과 ''(4번키) 값이 빠져있습니다.
생각하시는것이 맞습니다.
0 이랑 '' 빈공백은 false 를 뜻하니 반환하지 않는거죠.
또한 키값은 원본 그대로 가져오게 됩니다.
1 2 3 4 5 6 7 | Array ( [1] => 1 [2] => 2 [3] => 33 [5] => text ) | cs |
자 그럼 또다른 예제를 볼까요?
아래 소스는 배열에서 2 이상인것만 가져오고 싶은겁니다.
1 2 3 4 | $arr = [0,1,2,33,'','text']; print_r(array_filter($arr, function($val) { return $val >= 2; })); | cs |
결과는 아래와 같습니다.
배열의 키는 보존한채로 2 이상인 값만 반환된거죠.
1 2 3 4 5 | Array ( [2] => 2 [3] => 33 ) | cs |
array_filter 확실이 아셨나요?
'프로그래밍 > Php' 카테고리의 다른 글
[디자인패턴] php 로 알아보는 Builder pattern (0) | 2020.04.24 |
---|---|
[디자인패턴] php 로 알아보는 Builder pattern (주식 정보 가져오기, 주식 정보 API만들기- kospi, kosdaq, krx) (0) | 2020.04.23 |
php 람다 클로저 익명함수 (0) | 2018.10.15 |
파이썬 한국어 KoNlPy 설치 및 사용법 (한글형태소 분석기) (0) | 2018.09.10 |
php 정규식 정상적인 패턴인지 체크 (0) | 2018.07.19 |