프로그래밍/Php

고차원 함수 array_map 과 array_reduce 를 이용한 배열을 문자열로 변환

소행성왕자 2020. 5. 28. 13:20

아래와 같은 $originArr 배열이 있을때 BB output 처럼 하고 싶을 경우가 많습니다.

for문과  foreach 문으로 반복하면서 문자열 처리를 할수 있습니다만

고차원 함수인 array_map 과 array_reduce 를 이용하여 반복처리 하는 방법을 보여드립니다.

$originArr

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

            [1] => Array
                (
                    [isu_cd] => A900040
                    [kor_cor_nm] => 차이나그레이트
                    [chg_dt] => 2020/05/22
                    [tr_stp_rsn] => 법정제출기한까지 사업보고서를 제출하지 아니한 후, 법정제출기한의 다음날부터 10일이내에 사업보고서를 제출하지 아니함 
                )

            [2] => Array
                (
                    [isu_cd] => A030270
                    [kor_cor_nm] => 에스마크
                    [chg_dt] => 2020/05/21
                    [tr_stp_rsn] => 감사의견거절(감사범위제한 및 계속기업 존속 불확실)
                )

            [3] => Array
                (
                    [isu_cd] => A054340
                    [kor_cor_nm] => 피앤텔
                    [chg_dt] => 2020/05/21
                    [tr_stp_rsn] => 감사의견 거절(감사범위 제한 및 계속기업 존속능력에 대한 불확실성)
                )

            [4] => Array
                (
                    [isu_cd] => A197210
                    [kor_cor_nm] => 리드
                    [chg_dt] => 2020/05/14
                    [tr_stp_rsn] => 기업의 계속성 및 경영의 투명성 등을 종합적으로 고려하여 상장폐지기준에 해당한다고 결정
                )
BB output

,"A094190","이엘케이","2020/05/22","감사의견 거절(감사범위 제한 및 계속기업 존속능력에 대한 불확실성)"
,"A900040","차이나그레이트","2020/05/22","법정제출기한까지 사업보고서를 제출하지 아니한 후, 법정제출기한의 다음날부터 10일이내에 사업보고서를 제출하지 아니함 "
,"A030270","에스마크","2020/05/21","감사의견거절(감사범위제한 및 계속기업 존속 불확실)"
,"A054340","피앤텔","2020/05/21","감사의견 거절(감사범위 제한 및 계속기업 존속능력에 대한 불확실성)"
,"A197210","리드","2020/05/14","기업의 계속성 및 경영의 투명성 등을 종합적으로 고려하여 상장폐지기준에 해당한다고 결정"

 

 

전체 코드를 보면 아래와 같습니다.

	$res = array_map(
            function ($arr) {
                return array_reduce(
                    $arr,
                    function ($v1, $v2) {

                        return "$v1,\"$v2\"";
                    }
                );
            },
            $originArr
        );

        $output = implode("\n",$res);
        echo '<pre>';
        print_r($output);
        exit;

 

. array_reduce 란 무엇인가?

검색 많이 해보면 아시겠지만 숫자 더하는 부분이 많이 나옵니다.

여기서는 더하기가 아닌 문자열 합치는 방법을 보여드립니다.

 

아래와 같은 배열이 있습니다.

$tmpArr

[isu_cd] => A094190
[kor_cor_nm] => 이엘케이
[chg_dt] => 2020/05/22
[tr_stp_rsn] => 감사의견 거절(감사범위 제한 및 계속기업 존속능력에 대한 불확실성)
$res = array_reduce(
	$tmpArr,
	function ($v1, $v2) {
		return "$v1,$v2";
	}
);

print_r($res);
exit;

array_reduce 를 이용하면 결과값은 아래와 같이 나오게 됩니다.

반복하면서 $v1 과 $v2를 , 로 연결해주는 역할을 하죠

,A094190,이엘케이,2020/05/22,감사의견 거절(감사범위 제한 및 계속기업 존속능력에 대한 불확실성)

 

그렇다면 원래배열 $originArr 을 array_map 으로 반복하면서 array_reduce를 실행하면 되겠죠

아래와 같이 말이죠.

	$res = array_map(
            function ($arr) {
                return array_reduce(
                    $arr,
                    function ($v1, $v2) {

                        return "$v1,\"$v2\"";
                    },
                    "상장폐지"
                );
            },
            $originArr
        );

        $output = implode("\n",$res);
        echo '<pre>';
        print_r($output);
        exit;

array_reduce 3번째 인자로 초기값이 들어갑니다.

상장폐지,"A094190","이엘케이","2020/05/22","감사의견 거절(감사범위 제한 및 계속기업 존속능력에 대한 불확실성)"
상장폐지,"A900040","차이나그레이트","2020/05/22","법정제출기한까지 사업보고서를 제출하지 아니한 후, 법정제출기한의 다음날부터 10일이내에 사업보고서를 제출하지 아니함 "
상장폐지,"A030270","에스마크","2020/05/21","감사의견거절(감사범위제한 및 계속기업 존속 불확실)"
상장폐지,"A054340","피앤텔","2020/05/21","감사의견 거절(감사범위 제한 및 계속기업 존속능력에 대한 불확실성)"
상장폐지,"A197210","리드","2020/05/14","기업의 계속성 및 경영의 투명성 등을 종합적으로 고려하여 상장폐지기준에 해당한다고 결정"