채택완료

php 함수 리턴을 여러개 방법

2021-07-08 (목) 11:28:18 2,912

$a 와 $b 두 숫자를 처리하는 함수를 만들었습니다.

그런데, 문제점은 2번 반복을 하고 있습니다.

$a=num_reverse(13);
$b=num_reverse(8);

이것을 함수 파라미터가 2개 들어가는 함수로 수정하고 싶습니다.

num_reverse($num1, $num2)으로

Copy
// 기존 함수

function num_reverse($num) {
    $num_r = strrev($num);
    $x=1;
    $arr=[];
    for($i=0; $i<strlen($num_r); $i++) {
        $aa = substr($num_r, $i,1)*$x; 
        array_push($arr, $aa);
        $x = $x * 10;
    }
    return array_reverse($arr);    
}
$a=num_reverse(13);
$b=num_reverse(8);

 

// function num_reverse($num1, $num2) 처리 방법을 수정하고 싶습니다.

$num1 = mt_rand=(1, 99);

$num2 = mt_rand=(1, 99);

if($num1<$num2){

 $tmp = $num1;

 $num1=$num2;

 $num2=$tmp;

}

list($a, $b) = num_reverse($num1, $num2);
|

답변 2개

채택된 답변
+20 포인트
2021-07-08 (목) 16:04:33

그에 맞게 함수를 작성해줘야 합니다.

Copy
function num_reverse() {
    if ( func_num_args()<1 ) return false;
    $result = [];
    foreach ( func_get_args() as $k=>$num ) {
        $num = (string)$num;
        for ($i=0, $len=strlen($num); $i<$len; $i++) {
            $result[$k][] = $num[$i] * 10**($len-$i-1);
        }
    }
    return $result;
}

$example = num_reverse(13, 8);

print_r($example);

/*
Array
(
    [0] => Array
        (
            [0] => 10
            [1] => 3
        )

    [1] => Array
        (
            [0] => 8
        )

)
*/

+ func_num_args()

- https://www.php.net/manual/en/function.func-num-args.php

+ func_get_args()

- https://www.php.net/manual/en/function.func-get-args.php

참고로, 질문의 함수를 그대로 사용하려면…

방법은 많은데 기존 코드 그대로에 약간 추가만 해주면 되겠네요.

Copy
function num_reverse($num, $num2) {
    $result = [];
    foreach ( [$num, $num2] as $num ) {
        $num_r = strrev($num);
        $x=1;
        $arr=[];
        for($i=0; $i<strlen($num_r); $i++) {
            $aa = substr($num_r, $i,1)*$x;
            array_push($arr, $aa);
            $x = $x * 10;
        }
        $result[] = array_reverse($arr);    
    }
    return $result;
}

print_r(num_reverse(13, 8));

// 결과는 위와 동일합니다.

마지막 리턴부분에서

return array(리턴값배열1, 리턴값배열2);

처리하시고

출력부분에서

$return = num_reverse($num,$num2);

$num = $return[0];

$num2 = $return[1];

이렇게처리해주면되겠네요.

답변을 작성하려면 로그인이 필요합니다.