【问题标题】:PHP: Passing an array through multiple functionsPHP:通过多个函数传递数组
【发布时间】:2012-02-23 11:13:12
【问题描述】:

这个代码可行吗?

一个愚蠢的问题,但我无法理解这一点。 假设 $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 ));  
}
 }

【问题讨论】:

    标签: php arrays function parameter-passing


    【解决方案1】:

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

    total_value() 接收整个数组(在函数find_four() 的范围内称为$player_value)并使用数组的所有元素执行计算。 total_value() 接收数组并在for 循环中使用其元素。

    您的问题并不完全清楚您不了解什么,但这似乎是关于传递整个数组而不是单个值的部分。可以将数组传递给函数,实际上所有内置的 PHP array_*() 函数都依赖于该行为。

    默认情况下,PHP 在函数之间通过值而不是通过引用传递数组,因此函数接收原始数组的副本,而不是原始数组。函数对传入的数组所做的任何修改都只是局部修改。

    数组(像任何值一样)可以像function_call(&amp;$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
    )
    

    【讨论】:

    • 谢谢我知道这个问题可能很难理解我在寻找什么,但你设法回答了我的担忧。我想知道是否通过仅将 $product_value 数组传递给函数,该函数是否可以访问存储在数组中的所有值,即 $product_value[$i] 其中 $i 介于 0 和 4 之间。
    猜你喜欢
    • 2012-08-14
    • 2020-01-25
    • 1970-01-01
    • 2011-11-13
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    相关资源
    最近更新 更多