프로그래밍/Php

php 고차함수 array_reduce 무엇에 쓰는 물건인고?

소행성왕자 2020. 7. 31. 09:36

 

array_reduce ( array $array , callable $callback [, mixed $initial = NULL ] ) 

콜백 함수를 사용하여 배열을 단일 값으로 반복적으로 줄입니다.

[$initial] 마지막 인자는 초기 값 입니다.

 

사용방법을 알아보도록 하죠

 

$aa = [];

$aa[] = [
    'isu_cd'     => 'A0949921',
    'kor_cor_nm' => '삼성전자',
    'chg_dt'     => '2015/12/25',
    'tr_stp_rsn' => '감사의견 승인',
];

$aa[] = [
    'isu_cd'     => 'A094190',
    'kor_cor_nm' => '이엘케이',
    'chg_dt'     => '2020/05/22',
    'tr_stp_rsn' => '감사의견 거절(감사범위 제한 및 계속기업 존속능력에 대한 북확실성)',
];

$res = array_reduce(
    $aa[1],
    function ($hab, $val) {
        echo "hab => $hab".PHP_EOL;
        echo "val => $val".PHP_EOL;
        echo '-------------------------'.PHP_EOL;
        return "$hab,$val";
    },
    'AA'
);

print_r($res);
hab => AA
val => A094190
-------------------------
hab => AA,A094190
val => 이엘케이
-------------------------
hab => AA,A094190,이엘케이
val => 2020/05/22
-------------------------
hab => AA,A094190,이엘케이,2020/05/22
val => 감사의견 거절(감사범위 제한 및 계속기업 존속능력에 대한 북확실성)
-------------------------
AA,A094190,이엘케이,2020/05/22,감사의견 거절(감사범위 제한 및 계속기업 존속능력에 대한 북확실성)

 

배열 aa[1] 번만 단일값으로 만들어봤습니다.

array_reduce 코드를 보시면 array_reduce(배열, 콜백, 초기값) 으로 사용 됩니다.

 

콜백 함수에 인자가 2개 있는데 function ($hab, $val) 

첫번째 인자 : 이전 반복의 리턴 값을 보유합니다. 첫 번째 반복의 경우 대신 값을 유지합니다 

두번째 인자 : 현재 반복의 값을 보유합니다.

 

 

자 그렇다면 위 배열 2개는 어떻게 할까요?

$res = array_map(function($arr) {

    return array_reduce(
        $arr,
        function ($hab, $val) {
            echo "hab => $hab".PHP_EOL;
            echo "val => $val".PHP_EOL;
            echo '-------------------------'.PHP_EOL;
            return "$hab,$val";
        },
        'AA'
    );

}, $aa);
hab => AA
val => A0949921
-------------------------
hab => AA,A0949921
val => 삼성전자
-------------------------
hab => AA,A0949921,삼성전자
val => 2015/12/25
-------------------------
hab => AA,A0949921,삼성전자,2015/12/25
val => 감사의견 승인
-------------------------
hab => AA
val => A094190
-------------------------
hab => AA,A094190
val => 이엘케이
-------------------------
hab => AA,A094190,이엘케이
val => 2020/05/22
-------------------------
hab => AA,A094190,이엘케이,2020/05/22
val => 감사의견 거절(감사범위 제한 및 계속기업 존속능력에 대한 북확실성)
-------------------------
<pre>Array
(
    [0] => AA,A0949921,삼성전자,2015/12/25,감사의견 승인
    [1] => AA,A094190,이엘케이,2020/05/22,감사의견 거절(감사범위 제한 및 계속기업 존속능력에 대한 북확실성)
)