2010-11-18 6 views
0

私は検索して検索しましたが、同様の問題を持つ人は見つかりませんでした。withing do ... whileループから値を配列にプッシュできません

各レコードの値を4つの異なる配列にプッシュするコードでdo ... whileループがあります。配列が空であることを除いて、すべてがうまくいくように見えます(警告:0除算)。

ループ内の各注文日のUnixタイムスタンプと同様に、各レコードの4つの値をエコーすることができるので、値は各レコードで正しくなりますが、配列は空です。私はループ内の配列[]コードのブロックの周りの条件文をコメントアウトしようとしましたが、違いはありません。

代わりに、代わりにarray_pushを試してみてください。再び違いはありません。

私は初心者ですし、私の人生のために、なぜ配列にデータが取り込まれないのか分かりません。

これは、ループの外のコードです:

// set timezone and $one_year and $year_limit variables (used in the do-while loop) 
ini_set('date.timezone', 'America/Los_Angeles'); 
     $one_year = 60 * 60 * 24 * 365; 
     $year_limit = strtotime("-1 year"); 

// create the empty arrays for each rating 
$total_vals = array(); 
$food_vals = array(); 
$service_vals = array(); 
$atmo_vals = array(); 

// get the average for each rating 
$total_avg = round((array_sum($total_vals))/(count($total_vals))); 
$food_avg = round((array_sum($food_vals))/(count($food_vals))); 
$service_avg = round((array_sum($service_vals))/(count($service_vals))); 
$atmo_avg = round((array_sum($atmo_vals))/(count($atmo_vals))); 

これはループです:

<?php do { ?> 
    <?php 
    // create unix timestamp from order_date 
    $pub_date = strtotime($row_getReviews['order_date']); 

    // add rate values from each record to the arrays if less than 1 year old 
    if($pub_date - $one_year < $year_limit) { // tried commenting the condition out 
$total_vals[] = $row_getReviews['total_rate']; 
$food_vals[] = $row_getReviews['food_rate']; 
$service_vals[] = $row_getReviews['service_rate']; 
$atmo_vals[] = $row_getReviews['atmo_rate']; 
} 
    ?>  

<!-- html, css, etc here to display text and more --> 

<?php } while ($row_getReviews = mysql_fetch_assoc($getReviews)); ?> 

すべてのヘルプは大歓迎です!

答えて

0

は、そのためには

Create empty arrays 

Loop 

Get averages 

を試してみてください。平均化する前にループが発生していることを確認してください。

そしてdo ... while以外のループを使用してください。そうすればMayhemが述べた理由で最初の繰り返しのデータが得られます。

+0

OK!ループが機能した後(外側)の平均コードブロックを移動する。 do ... whileループのwhileステートメントの後に配置し、配列から平均を得ました(予想通りに設定されています)。ページの上部に平均を表示したいので、まずレコードを2回ループする必要があります(最初は平均値、次に個々のレコードの詳細値(テキストなど))。私は1つのループだけを使用しようとしていました。しかし、少なくとも個人の記録を表示するためには、do ... whileループが必要です。ありがとう! – tjkampa

+0

もちろんTed。申し訳ありませんが、ここで初めて質問しています。しかし、1つの注意点、do ... whileループはすべて正しいです。私はすべてのコードを頭の上に移動しました。 do ... whileループで値を取得します。平均を計算する。巻き戻しレコードセット。すべては順調です。 (そして、これを後で動かすと言った、私はちょうどそれを捕まえなかった)。 – tjkampa

関連する問題