这段代码可以吗?
一个愚蠢的问题,但我对此有一个问题。
假设$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 ));
}
}
答案 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
)