2009-10-15 1 views
2

some 또는 other의 경우 PHP의 array_reduce 함수는 정수를 세 번째 매개 변수로 허용합니다. 세번째 매개 변수는 전체 환원 공정의 출발점으로서 사용된다 : 두 번째 통화PHP의 array_reduce 정수 세 번째 매개 변수에 대한 해결 방법

function int_reduc($return, $extra) { 
    return $return + $extra; 
} 

$arr = array(10, 20, 30, 40); 
echo array_reduce($arr, 'int_reduc', 0); //Will output 100, which is 0 + 10 + 20 + 30 + 40 

function str_reduc($return, $extra) { 
    return $return .= ', ' . $extra; 
} 

$arr = array('Two', 'Three', 'Four'); 
echo array_reduce($arr, 'str_reduc', 'One'); //Will output 0, Two, Three, Four 

'One'는 0이되고, 그 후 사용 된 정수 값의 변환 얻는다.

왜 PHP가이 작업을 수행합니까?

대안 환영 ...

+2

직접 함수를 작성하십시오. PHP가 노출하는 모든 것을 감싸십시오. 지옥과 일치하지 않습니다. –

+0

@ lonut : 슬픈 사실이지만. –

답변

3

$initial 값을 전달하지 않으면 PHP는 0123이라고 가정합니다.을 입력하고 NULL을 함수에 전달합니다. 가능한 해결 방법은 코드에서 을 확인하는 것입니다.

function wrapper($a, $b) { 
    if ($a === null) { 
     $a = "One"; 
    } 
    return str_reduc($a, $b); 
} 

$arr = array('Two', 'Three', 'Four'); 
echo array_reduce($arr, 'wrapper'); 
2

당신은 당신의 자신의 array_reduce 기능을 작성할 수 있습니다. 여기에서의 I는 빨리 강타 :

function my_array_reduce($input, $function, $initial=null) { 
    $reduced = ($initial===null) ? $initial : array_shift($input); 
    foreach($input as $i) { 
    $reduced = $function($reduced, $i); 
    } 
    return $reduced; 
} 
+0

혹시 - 세 번째 매개 변수를 입력하지 않으면 예상대로 작동하지 않을 수 있습니다. – Joel

+0

해결되었습니다. 지금 잘 작동해야합니다. – Joel

2

세번째 파라미터

혼합 array_reduce (배열 $ 입력 콜백 $ 함수 [INT $으로의 초기])

선택적 참조 http://us2.php.net/manual/en/function.array-reduce.php

그냥 사용 :당신은 최고의 쉼표를하지 않으려면 당신이 원하는 모든 쉼표로 문자열을 조인하는 경우

$arr = array('One', 'Two', 'Three', 'Four'); 
echo array_reduce($arr, 'str_reduc'); 

, 물론

function str_reduc($return, $extra) { 
    if (empty($return)) 
     return $extra; 
    return $return .= ', ' . $extra; 
} 

사용, 사용 내파

echo implode(", ", $arr); 

참조 http://us2.php.net/manual/en/function.implode.php

+0

제 예제에서 함수를 사용하고자하는 reaon이 명확하지 않습니다. 그것은 꽤 복잡하지만 세 번째 매개 변수가 필요합니다. – Jrgns

관련 문제