【问题标题】:Cannot push values into an array from withing do ... while loop无法从 do ... while 循环中将值推送到数组中
【发布时间】:2010-11-18 06:14:59
【问题描述】:

我找了又找,找不到有类似问题的人。

我有一个 do ... while 循环,其中包含将每个记录中的值推送到四个不同数组中的代码。一切似乎都很好,除了数组是空的(给我警告:除以零)。

我能够回显每个记录的四个值以及循环中每个订单日期的 unix 时间戳,因此每个记录的值都是正确的,但数组是空的。我尝试在循环中注释掉 array[] 代码块周围的条件语句,但没有区别。

还尝试使用 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)); ?>

非常感谢任何帮助!

【问题讨论】:

    标签: php arrays loops


    【解决方案1】:

    试试

    Create empty arrays
    
    Loop
    
    Get averages
    

    按这个顺序。确保在获得平均值之前发生循环。

    并使用除 do ... while 之外的任何类型的循环,以便您根据 Mayhem 所述的原因获得第一次迭代的数据。

    【讨论】:

    • 好的!在循环工作之后(外部)移动平均代码块。将它放在 do ... while 循环的 while 语句之后,并从数组中获取平均值(按预期填充)。由于我想在页面顶部显示平均值,因此看起来我需要遍历记录两次,首先是平均值,然后是各个记录的详细值(文本等)。我试图只使用一个循环。但看来我确实需要 do ... while 循环,至少用于显示个人记录。谢谢!
    • 当然是泰德。对不起,我第一次在这里问问题。不过需要注意的是,使用 do ... while 循环一切都是正确的。我将所有代码移到了头顶:设置数组; do ... while 循环获取值;计算平均值;倒带记录集。一切都很好。 (而且 thisMayhem 说要移动它,我只是没听懂。)
    猜你喜欢
    • 2019-10-31
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    相关资源
    最近更新 更多