2012-01-31 2 views
1

이 코드가 가능합니까?PHP : 여러 함수를 통해 배열 전달

어리석은 질문이지만 이것을 이해하는 데 문제가 있습니다. $product_quality[$i]$saleprice[$i]이 이미 값으로 채워져 있다고 가정합니다. 키를 지정하지 않고 배열에 함수를 전달합니다.

은 따라하십시오 $product_value[$i] 또는

for ($i=0;$i<5;$i++) 
{ 

$product_value[$i]=($product_quality[$i]/$saleprice[$i]); 

} 


$trial_x=find_four($product_value); 



function find_four($player_value) 
{ 

$trial_x=2; 
$h=5; 
$slope=1; 

    while(abs($h)>0.01){ 

    $delta_y=total_value($player_value, $trial_x+0.01)-total_value($player_value, $trial_x) 
    $slope=100*$delta_y; 
    $h=-(total_value($player_value, $trial_x)-4)/$slope; 
    $trial_x=$trial_x+$h; 
    } 

return ($trial_x); 
} 


function total_value($player_value, $x) 
{ 

$total_value=0; 

    for ($i=0;$i<5;$i++) 
    { 

    $total_value+=Cum_Norm($x,$player_value[$i],$sd[$i]); 
    } 

return($total_value); 
} 


function Cum_Norm($x, $mean, $sd) 
{ 
echo $x."****1****<br/><hr/>"; 
echo $mean."Should be empty?***2****<br/><hr/>"; 
echo $sd."*****3*****<br/><hr/>"; 
$z=($x-$mean)/$sd; 
echo $z."*****4*****<br/><hr/>"; 

$b1=0.31938; 
$b2=-0.35656; 
$b3=1.78148; 
$b4=-1.82126; 
$b5=1.33027; 
$c=0.3989423; 

if ($z>=0) 
{ 
    $t=1/(1+0.2316419*$z); 
    echo $t."*****5*****<br/><hr/>"; 
    return (1.0 - $c * exp(-$z * $z/2) * $t * ($t *($t * ($t * ($t * $b5 + $b4) + $b3) + $b2) + $b1)); 
} 

else 
{ 
$t=1/(1-0.2316419*$z); 
echo $t."*****5*****<br/><hr/>"; 
return ($c * exp(-$z * $z/2) * $t * ($t *($t * ($t * ($t * $b5 + $b4) + $b3) + $b2) + $b1)); 
} 
} 

답변

3

$player_value전체 배열$product_value 기능 find_four()에 전체 배열로 전달됩니다. 그러나 find_four()$product_value 배열의 값을 직접 사용하지 않습니다. 대신 전체 배열은 total_value() 함수 옆에 전달됩니다.

total_value()은 상기 어레이의 모든 요소를 ​​이용하여 계산을 수행한다 (find_four() 기능의 범위를 $player_value 불림)전체 어레이를 수신한다. total_value()은 배열을 받고 for 루프 내에서 해당 요소를 사용합니다.

당신이 이해하지 못하는 것이 귀하의 질문에서 완전히 명확하지 않지만 개별 값보다는 전체 배열을 전달하는 부분 인 것으로 보입니다. 배열은 함수로 전달 될 수 있으며 실제로 모든 내장 PHP array_*() 함수는 그 동작에 의존합니다.

기본적으로 PHP는 함수 사이에 배열을 참조가 아닌 값으로 전달하므로이 함수는 복사본을 원본이 아닌 원본으로 수신합니다. 전달 된 배열에 대해 함수가 수행하는 모든 수정은 로컬 수정 일뿐입니다.

배열은 function_call(&$array)에서와 같이 참조로 전달 될 수 있으므로 function_call() 내부의 수정은 전달 된 원래 배열을 수정합니다. sort()과 같은 특정 내장 함수는 배열 참조를 허용하므로 반환하지 않고 전달 된 원래 배열에서 작동하고 변수에 다시 할당 할 필요가 없습니다.

$input_array = array(1,2,3,4,5); 

// Pass the whole array to a function (by value) 
function showArray($input_array) { 
    print_r($input_array); 
} 

showArray($input_array); 
Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 4 
    [4] => 5 
) 
+0

감사합니다.이 질문을 통해 내가 찾던 내용을 이해하기가 어려울 수도 있지만 귀하는 제 우려 사항에 답변 할 수있었습니다. $ product_value 배열을 함수에 전달하면 배열에 저장된 모든 값에 액세스 할 수 있는지 궁금합니다. $ product_value [$ i] 여기서 $ i는 0과 4 사이의 값입니다. – NeverPhased

관련 문제