PHP:通过多个函数传递数组

时间:2012-01-31 17:59:08

标签: php arrays function parameter-passing

这段代码可以吗?

一个愚蠢的问题,但我对此有一个问题。 假设$product_quality[$i]$saleprice[$i]已经填充了值。 将数组传递给函数而不指定其键。

请关注$product_value[$i]$player_value

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 ));  
}
 }

1 个答案:

答案 0 :(得分:3)

整个数组 $product_value作为完整数组传递给函数find_four()。但是,find_four()并未直接使用$product_value数组中的值。相反,完整数组将在函数total_value()旁边传递。

total_value()接收整个数组(在函数$player_value范围内调用find_four())并使用数组的所有元素执行计算。 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
)