php foreach循环跳过第一条记录

时间:2014-09-12 23:13:52

标签: php google-maps foreach

我有一个foreach循环,它在第一个循环中通过数据跳过第一个检索到的记录。我的桌子上有四年的数据。每年都有一种颜色:

2011 - #0000FF 2012年 - #ff33ff 2013年 - #6666CC 2014年 - #FFFF00

当我循环播放时,第一年的颜色(无论我选择哪一年,因为数据是动态的)都是空白的。第二年有第一年的颜色,第三年有第二年的颜色,依此类推。

代码如下所示:

while ($record = mysql_fetch_object($result2)) {
$set[$record->TransYear][] = $record;
}

function render($record) {
$output .= "<point lat='{$record->TransLat}' lng='{$record->TransLong}' 
poly='{$record->TransYear}' />";  
return $output;
}


foreach ($set as $TransYear => $records) {
$YearColor = $record->YearColor; 
print "<line category='{$TransYear}' color='{$YearColor}' width='4'>";
print $YearColor;
foreach ($records as $record) {
print render($record); 
}
print '</line>';
}

当我将年份查询设置为2011年和2012年时,输出如下所示:

<line category="2011" color="" width="4">
<point lat="43.279" lng="-91.780" poly="2011"/>
<point lat="43.274" lng="-91.785" poly="2011"/>
<point lat="43.272" lng="-91.777" poly="2011"/>
<point lat="43.273" lng="-91.784" poly="2011"/>
<point lat="43.273" lng="-91.782" poly="2011"/>
<point lat="43.277" lng="-91.780" poly="2011"/>
<point lat="43.275" lng="-91.780" poly="2011"/>
<point lat="43.274" lng="-91.786" poly="2011"/>
<point lat="43.275" lng="-91.781" poly="2011"/>
<point lat="43.275" lng="-91.783" poly="2011"/>
<point lat="43.275" lng="-91.779" poly="2011"/>
</line>
<line category="2012" color="#0000FF" width="4">
<point lat="43.225" lng="-91.847" poly="2012"/>
<point lat="43.116" lng="-91.900" poly="2012"/>
<point lat="43.296" lng="-92.026" poly="2012"/>
<point lat="43.004" lng="-91.972" poly="2012"/>
<point lat="43.007" lng="-91.962" poly="2012"/>
<point lat="43.011" lng="-91.930" poly="2012"/>
<point lat="42.798" lng="-91.734" poly="2012"/>
</line>

2 个答案:

答案 0 :(得分:0)

在您的第一个foreach循环中,您在内部$record中定义之前引用foreach。您打算使用$records

while ($record = mysql_fetch_object($result2)) {
  $set[$record->TransYear][] = $record;
}

function render($record) {
  $output .= "<point lat='{$record->TransLat}' lng='{$record->TransLong}' 
  poly='{$record->TransYear}' />";  
  return $output;
}

foreach ($set as $TransYear => $records) {
  $YearColor = $records->YearColor; // Here, change to $records
  print "<line category='{$TransYear}' color='{$YearColor}' width='4'>";
  print $YearColor;

  foreach ($records as $record) {
    print render($record); 
  }
  print '</line>';
}

顺便说一句,您可能会收到很多关于不使用PDOmysqli而不是弃用mysql的评论。我建议考虑改变这一点。此外,您可能会考虑不在各种循环中重复使用变量名称或关闭名称以避免类似错误。

答案 1 :(得分:0)

下面的第二行有$record,但第一行会创建$records。 如果YearColor不是$TransYear中的变量,那么您需要从$records[0]

获取
foreach ($set as $TransYear => $records) {
    $YearColor = $record->YearColor; 
    print "<line category='{$TransYear}' color='{$YearColor}' width='4'>";