PHP цикл foreach, увеличивающий только один раз каждую другую итерацию - PullRequest
2 голосов
/ 13 января 2012

этот действительно озадачивает меня, так что спасибо за любую помощь.Я пытаюсь вывести значения набора результатов SQL, но цикл foreach, по-видимому, повторяется дважды, а затем увеличивает индекс массива.Таким образом, если моя строка БД содержит смежные целые числа 1,2,3,4,5, выход цикла foreach равен 1,1,2,2,3,3,4,4,5,5.Не вижу причины.Кодекс следует.

$result = mysql_query("SELECT * FROM Test");

echo "<table border=1><tr></tr>";

While($row = mysql_fetch_array($result))
{
    echo "<tr>";
    foreach($row as $value)
    {
        echo "<td>" . $value . "</td>";
    }
    echo "</tr><tr>";
    for($x=0;$x<5;$x++)
    {
        echo "<td>" . $row[$x] . "</td>";
    }
    echo "</tr>";
}

Затем был добавлен второй цикл for для отладки, чтобы убедиться, что массив на самом деле не содержит двух экземпляров каждого значения.Но этот цикл выводит как положено: 1,2,3,4,5.Есть идеи?Спасибо.

Ответы [ 4 ]

4 голосов
/ 13 января 2012

По умолчанию для второго параметра mysql_fetch_array установлено значение MYSQL_FETCH_BOTH, которое будет регистрировать каждое значение под индексом, а также имя столбца. Поставьте MYSQL_FETCH_NUM, чтобы получить только числовые индексы:

while($row = mysql_fetch_array($result, MYSQL_FETCH_NUM)) {
 ...
0 голосов
/ 13 января 2012

измените

    While($row = mysql_fetch_array($result))
{
    echo "<tr>";
    foreach($row as $value)
    {
        echo "<td>" . $value . "</td>";
    }
    echo "</tr><tr>";
    for($x=0;$x<5;$x++)
    {
        echo "<td>" . $row[$x] . "</td>";
    }
    echo "</tr>";
}

на

    While($row = mysql_fetch_array($result))
{
    echo "<tr>";
    foreach($row as $value)
    {
        echo "<td>" . $value . "</td>";
    }
    echo "</tr>";
}

и скажите мне, какой у вас выход ...

0 голосов
/ 13 января 2012

Другой вариант - сделать цикл foreach, который вызывает и ключ, и значение.

foreach($row as $key=>$value)
0 голосов
/ 13 января 2012

mysql_fetch_array возвращает ассоциативный массив, используя имена столбцов результата mysql в качестве ключей, но также делает их доступными по номеру столбца, поэтому строка:

Mysql COL: A | B | C Mysql VAL: 1 | 2 | 3

вернёт массив, который выглядит следующим образом, после прохождения функции mysql_fetch_array:

array(
   'A'=>1,
   0  =>1,
   'B'=>2
   1  =>2,
   'C'=>3,
   2  =>3
)

и цикл foreach будет перебирать заданные и числовые ключи (создавая дублирование)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...