0

次のような値を含む配列 year_values があります

$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_values$vals[5] として取得され、 array のすべての値に対して while 内で計算が必要になります$year_values

それを修正する方法は?

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
4

3 に答える 3

3

再利用できるように、すべてのデータを保存する必要があると思います。

$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);
  }
}
于 2013-06-30T08:08:37.707 に答える
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);


       }
    }
于 2013-06-30T08:10:15.743 に答える
1

行がすべてフェッチされると、mysql_fetch_row は false を返します。それを再利用するには、それらを変数に保存する必要があります(Jariの応答など)。または、2つのサイクルを切り替えることができます(imulsionの回答を参照)

于 2013-06-30T08:13:45.317 に答える