Индекс 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>
Другие вопросы по тегам