Индекс cfloop для php для цикла
Я переписываю страницу Coldfusion на PHP. У меня есть индексированный cfloop и внутри него запрос cfoutput. Это выглядит так:
<h2>Choose up to Five Counties:</h2>
<cfif results.recordcount gt 0>
<cfloop from="1" to="5" step="1" index="i">
<!--- Looping Data --->
<cfoutput>
<select name="counties" style="width:150px; font-family:Arial,Helvetica; font-size:11px;">
<option value="">- select county -
</cfoutput>
<cfoutput query="results">
<option value="#County_Name#" style="font-family:Arial,Helvetica; font-size:12px;">#County_Name#</option>
</cfoutput>
</select>
</cfloop>
</cfif>
Этот код зацикливается на коде тега выбора 5 раз и выводится на выход тега опции запроса MSSQL. Я написал сторону PHP, и это выглядит так:
<h2>Choose up to Five Counties:</h2>
<?php if(count($results) > 0) {
for ($i=0; $i<count($results); $i++) {
if ($i == 5) {
break;
} ?>
<select name="counties" style="width:150px; font-family:Arial,Helvetica; font-size:11px;">
<option value="">- select county -
<?php for ($i=0; $i < count($results); $i++) { ?>
<option value="<?php echo $results[$i]['County_Name']; ?>" style="font-family:Arial,Helvetica; font-size:12px;"><?php echo $results[$i]['County_Name']; ?></option>
<?php } ?>
</select>
<?php } ?>
<?php }; ?>
Внутренний индекс для цикла работает просто отлично, но я могу только заставить внешний цикл отображать код тега select один раз, а не пять раз (это то, что мне нужно).
Какие-либо предложения?
3 ответа
Проблема в том, что вы используете $i
в обеих петлях. Таким образом, в первый раз, когда он проходит через второй цикл, он каждый раз сбрасывается в 0.
Измените переменную второго цикла на что-то вроде этого:
<?php for ($x=0; $x < count($results); $x++) { ?>
<option value="<?php echo $results[$x]['County_Name']; ?>" style="font-family:Arial,Helvetica; font-size:12px;"><?php echo $results[$x]['County_Name']; ?></option>
<?php } ?>
Первый цикл должен быть for ($i=0; $i<5; $i++)
вместо for ($i=0; $i<count($results); $i++)
, если вы хотите, чтобы он показывался, выберите пять раз.
Кроме того, не используйте $i
для обеих петель, как упоминалось в ответе TNC. Вот почему цикл завершается после первого выбора.
Хотя вы можете перевести строку за строку выше, ниже может быть немного более эффективным. Предполагая, что вы используете набор функций mssql_*:
<?php
$query = myssql_query('SELECT * ....');
?>
<h2>Choose up to Five Counties:</h2>
<select name="counties" style="width:150px; font-family:Arial,Helvetica; font-size:11px;">
<?php
while($results = mssql_fetch_assoc($query)){
echo "<option value=\"{$results['County_Name']}\" style=\"font-family:Arial,Helvetica; font-size:12px;\">{$results['County_Name']}</option>";
}
?>
</select>