1

わかりましたので、現在ショップを作成しています。ショッピング カートを格納するために、$basketItems、$basketWeights、および $basketQuantities の配列を使用しています。各インデックスは、バスケット内のアイテムに関連付けられます。

私のコードは、(私が持っている配列に従って) バスケット内の各アイテムをループし、データベースから関連情報を取得することによって機能します。

コードは、データベースから取得する最初の行ではうまく機能しますが、2 番目の項目に到達するとすぐに失敗しますが、その理由はわかりません。

この問題は、$weights または $prices 配列から正しいインデックスで必要な値を取得できない場合に発生するようです。配列 $weights が正しく形成されているかどうかを確認するために、コードで気付くでしょう。私はそれをエコーし​​、取得したいインデックスもエコーしました。何もエコーしません (私が知る限り!)

コードは次のとおりです。

    <?
/*
$basketItems
$basketWeights
$basketProducts

are arrays, each value stores the index of the item relating to the product in the database */

//show basket, go through all the basket items, the retrieves relevant information from the database
for($index = 0; $index < sizeof($basketItems); $index++)
{
    //get product at this index
    $getProduct = mysql_query("SELECT * from shop_products where prid='".$basketItems[$index]."' limit 1") or die(mysql_error());
    $product = mysql_fetch_array($getProduct);
    //weights is an array for each product ie 100, 200, 500
    $weights = explode(",", $product['prweights']);
    $weightIndex = $basketWeights[$index];
    $prices = explode(",", $product['prprices']);
?> <tr>
<td><b><? print_r(array_values($weights)); ?></b></td>
</tr><tr>
    <td><? echo($product['prtitle']); ?></td>
    <td><? echo ("$weightIndex/$weights[$weightIndex]"); ?>g</td>
    <td><? echo($basketQuantities[$index]); ?></td>
    <td><? echo $prices[$weightIndex]; ?></td>
    <td><? echo ($prices[$weightIndex] * $basketQuantities[$index]); ?></td>
    <td>&nbsp;</td>
  </tr>
  <?

  }
?>

そして結果はここで見ることができます: http://www.jamesmoorhouse.co.uk/images/shop.png

スクリーンショットからわかるように、各製品の上に表示されている配列からの結果をエコーする必要がある場所で何もエコーしません。

2 列目のテストの形式は、arrayIndex/arrayValueAtIndex g です。

4

1 に答える 1

0

ほんの2、3のメモ:

  • sizeof()をforループの外に移動してください。以前にsizeof()計算を実行します。
  • エコーから()を削除してください。必要ありません。
  • 出力する前に計算を行う場合があります
  • forループ内で新しく作成された変数に対して、forループの最後でunset()を使用できます。これにより、以前の反復からデータを上書きしたり再利用したりするのを防ぐことができます。
  • それらをフェッチするときにexplode()を使用し、それらを更新/保存するときにimplode()を使用する必要をなくします。データをデータベースに直接保存/フェッチするだけです。
  • すべてのbasketItem製品ID(prids)を知っている場合は、データベースにバスケットアイテムの配列全体(prids = 1,2,3,4,123)を一度に要求するだけです。mysql構文: 。WHERE prids IN('1','2','3')";を介して結果セット全体を呼び出しますmysql_fetch_assoc()。次に、配列をforeach()します。これにより、dbへの呼び出しが減ります。
  • 質問に答えるために:私は完全に軌道に乗っていないことを願っていますが、エラーは$weightIndex = $basketWeights[$index];$basketWeights配列データを提供していただけませんか。関係は適合しません。basketWeights[prdid][weights_index]のように、basketWeightsはassocである必要があります。
于 2012-07-09T10:38:06.153 に答える