Php 一起使用foreach和while循环

Php 一起使用foreach和while循环,php,Php,我有一个数组,其中包含一些值,如 $year_values = array(); foreach($year_strings as $str) { $year_values[] = explode(",", $str); } 然后我应用一个查询从数据库中提取一些值 $sql = "SELECT inventory.holdingcost as holdingcost, inventory.ordercost as ordercost, inventory.unitprice as uni

我有一个数组,其中包含一些值,如

$year_values = array();
foreach($year_strings as $str) {
  $year_values[] = explode(",", $str);
}
然后我应用一个查询从数据库中提取一些值

$sql = "SELECT inventory.holdingcost as holdingcost, 
inventory.ordercost as ordercost, inventory.unitprice as unitprice, 
inventory.lead_time as lead_time, items.id as iid 
FROM inventory, items 
WHERE inventory.item_name = items.item_name";
        mysql_error();

        $result = mysql_query($sql);
    foreach($year_values as $vals) {

      while ($row = mysql_fetch_row($result)) {



      $w = $row[2];
      $e = $row[0];
      $r = $row[1];
      $tt = $row[3];
      $eo = sqrt(2 *  $vals[5] * $r / ($e * $w));
      $eoq = round($eo, 1);
      $ro = $vals[5] / 360;
      $rop = round($ro * $tt);
      $op = round($vals[5] / $eoq, 1);
      $cc = round(89 / $op);
      $h = round((($eoq * $e * $w) / 2), 2);
      $o = round((($r * $vals[5]) / $eoq), 2);
      $z = round($h + $o, 2);


       }
    }
当我使用上面的foreach while循环时,它只将
$year\u值的第一个值取为$vals[5],我想在while中对数组
$year\u值的每个值进行计算

如何纠正

重复出现在value1中,即$val[5]当前:

Value1      Value 2    Value 3
199           202           0.25
199           205           0.25
199           210           0.25
199           230           0.25
1698          202           0.25
1698          205           0.25
1698          210           0.25
1698          230           0.25
相反,我希望这些值显示为

Value1      Value 2    Value 3
199          202           0.25
1698         205           0.25
15           210           0.25
971          230           0.25

我想你只需要存储你所有的数据,这样你就可以重用它了

$result = mysql_query($sql);
$rows = array() ;
while ($row = mysql_fetch_row($result)){
  $rows[] = $row ;
}

foreach($year_values as $vals) {
  foreach($rows as $row){
   $w = $row[2];
   $e = $row[0];
   $r = $row[1];
   $tt = $row[3];
   $eo = sqrt(2 *  $vals[5] * $r / ($e * $w));
   $eoq = round($eo, 1);
   $ro = $vals[5] / 360;
   $rop = round($ro * $tt);
   $op = round($vals[5] / $eoq, 1);
   $cc = round(89 / $op);
   $h = round((($eoq * $e * $w) / 2), 2);
   $o = round((($r * $vals[5]) / $eoq), 2);
   $z = round($h + $o, 2);
  }
}

我想你只需要存储你所有的数据,这样你就可以重用它了

$result = mysql_query($sql);
$rows = array() ;
while ($row = mysql_fetch_row($result)){
  $rows[] = $row ;
}

foreach($year_values as $vals) {
  foreach($rows as $row){
   $w = $row[2];
   $e = $row[0];
   $r = $row[1];
   $tt = $row[3];
   $eo = sqrt(2 *  $vals[5] * $r / ($e * $w));
   $eoq = round($eo, 1);
   $ro = $vals[5] / 360;
   $rop = round($ro * $tt);
   $op = round($vals[5] / $eoq, 1);
   $cc = round(89 / $op);
   $h = round((($eoq * $e * $w) / 2), 2);
   $o = round((($r * $vals[5]) / $eoq), 2);
   $z = round($h + $o, 2);
  }
}

只需将这些陈述颠倒过来:

while ($row = mysql_fetch_row($result)) {
foreach($year_values as $vals) {


      $w = $row[2];
      $e = $row[0];
      $r = $row[1];
      $tt = $row[3];
      $eo = sqrt(2 *  $vals[5] * $r / ($e * $w));
      $eoq = round($eo, 1);
      $ro = $vals[5] / 360;
      $rop = round($ro * $tt);
      $op = round($vals[5] / $eoq, 1);
      $cc = round(89 / $op);
      $h = round((($eoq * $e * $w) / 2), 2);
      $o = round((($r * $vals[5]) / $eoq), 2);
      $z = round($h + $o, 2);


       }
    }

只需将这些陈述颠倒过来:

while ($row = mysql_fetch_row($result)) {
foreach($year_values as $vals) {


      $w = $row[2];
      $e = $row[0];
      $r = $row[1];
      $tt = $row[3];
      $eo = sqrt(2 *  $vals[5] * $r / ($e * $w));
      $eoq = round($eo, 1);
      $ro = $vals[5] / 360;
      $rop = round($ro * $tt);
      $op = round($vals[5] / $eoq, 1);
      $cc = round(89 / $op);
      $h = round((($eoq * $e * $w) / 2), 2);
      $o = round((($r * $vals[5]) / $eoq), 2);
      $z = round($h + $o, 2);


       }
    }

mysql_fetch_row在获取所有行后将返回false。要重用它,您应该将它们存储在一个变量中,或者您可以切换两个周期

mysql\u fetch\u一旦所有行都被提取出来,row将返回false。要重用它,您应该将它们存储在一个变量中,或者您可以切换两个周期

我尝试过,但在这种情况下,查询结果会对数组$year\u values中的每个值重复。我尝试过,但在这种情况下,查询结果会对数组$year\u values中的每个值重复。抱歉,将您与作者混淆。。。我现在才看到你的问题,我会编辑。我尝试了建议的解决方案,但结果仍然不准确,重复发生,最后我的问题是固定的解决方案是:foreach($year_值为$key=>$vals){$w=$rows[$key][2];$e=$rows[$key][0];$r=$rows[$key][1];$tt=$rows[$key][3];$eo=sqrt(2*$vals[5]*$r/($e*$w));$eoq=round($eo,1);$ro=$vals[5]/360;$rop=round($ro*$tt);$op=round($vals[5]/$eoq,1);$cc=round(89/$op);$h=round($eoq($eoq*$e*$w)/2);$o=round($r*$vals[5])/$eoq])啊,对不起,把你和作者搞混了…我现在才看到你的问题,我会编辑。我尝试了建议的解决方案,但结果仍然不准确,重复发生,最后我的问题是固定的解决方案是:foreach($year_值为$key=>$vals){$w=$rows[$key][2]$e=$rows[$key][0];$r=$rows[$key][1];$tt=$rows[$key][3];$eo=sqrt(2*$vals[5]*$r/($e*$w));$eoq=round($eo,1);$ro=$vals[5]/360;$rop=round($ro*$tt);$op=round($op[5]/$eoq,1);$cc=round(89/$op);$h=round($eoq*$e*$w)/2);$rop=round($5);$eoq=round($5);$eoq]$VAL[5]中的每个值现在都在重复$VAL[5]中的每个值现在正在重复。您需要提供有关您试图实现的目标的更多详细信息。该代码的意义是什么?它根本不使用该计算结果。数组年份值包含以下值:array([0]=>2013[1]=>1[2]=>205[3]=>4]=>266[5] =>199)数组([0]=>2013[1]=>1[2]=>1748[3]=>4]=>299[5]=>1698)数组([0]=>2013[1]=>1[2]=>15[3]=>4]=>170[5]=>15)数组([0]=>2013[1]=>1[2]=>1000[3]=>4]=>31[5]=>971)数组([0]=>2013[1]=>1[2]=>975]=>975[4]=>117]我想使用所有第五个索引值进行公式计算,比如:$eo=sqrt(2*$VAL[5]*$r/($e*$w));并最终显示结果您需要提供有关您试图实现的目标的更多详细信息。该代码的意义是什么?它根本不使用该计算的结果。数组年份值包含以下值:array([0]=>2013[1]=>1[2]=>205[3]=>[4]=>266[5]=>199)阵列([0]=>2013[1]=>1[2]=>1748[3]=>[4]=>299[5]=>1698)阵列([0]=>2013[1]=>1[2]=>15[3]=>1[4]=>170[5]=>15)阵列([0]=>2013[1]=>1[2]=>1000[3]=>1[4]=>31[5]=>971)阵列([0]=>2013[1]=>1[2]=>1[4]=>975]=>我想使用所有第五个索引值进行公式计算,比如:$eo=sqrt(2*$VAL[5]*$r/($e*$w));最后显示结果