Хотя кругом вместе с foreach - PullRequest
1 голос
/ 16 апреля 2011

Я действительно застрял, пытаясь решить, что должно быть довольно простым.

У меня есть это

<?php 

$json = json_decode('{
                      "33540116":
                                 {"person":
                                           {"name":"John", "age":"36"}},
                      "33541502":
                                 {"person":                                                                                      
                                           {"name":"Jack", "age":"23"}}
                     }
        ');

 $id = array('33540116', '33541502');


foreach($id as $id) {

        echo $json->$id->person->{'name'}. '<br />';
        echo $json->$id->person->{'age'}. '<br />';


        }
?>

Таким образом, код декодирует строку json, а затем использует foreach для отображения каждого результата..

Этот файл json довольно большой, и меня интересуют только определенные записи, которые соответствуют идентификатору, хранящемуся в таблице mysql.

Для этого я заменил строку массива id выше наMySQL оператор выбора.

<?php
$json = json_decode('{
                      "33540116":
                                 {"person":
                                           {"name":"John", "age":"36"}},
                      "33541502":
                                 {"person":                                                                                      
                                           {"name":"Jack", "age":"23"}}
                     }
        ');

$result = mysql_query("SELECT id FROM people");
$row = mysql_fetch_array($result);

$id = array($row['id']);

foreach($id as $id) {

            echo $json->$id->person->{'name'}. '<br />';
            echo $json->$id->person->{'age'}. '<br />';


            }
?>

Хотя это работает, он дает мне только 1 результат.Что мне действительно нужно, так это просмотреть результаты.К сожалению, я не знаю, как построить цикл while вместе с foreach.

Я буду очень признателен за вашу помощь.

ОБНОВЛЕНИЕ (дополнительный вопрос)

Спасибо всем.Вы помогли мне решить проблему.

Однако у меня есть еще один вопрос, касающийся этого вопроса.

Я упоминал выше, что просто хотел повторить результаты.Но это не совсем так.Что я действительно хочу сделать, так это обновить ту же таблицу mysql, получив результаты, полученные из файла json.

У меня есть таблица с именами людей с полями id, name и age.

Как я могуобновить таблицу с этими результатами?

Еще раз спасибо.

Ответы [ 5 ]

1 голос
/ 16 апреля 2011

mysql_fetch_array выбирает только одну строку за раз.Вы можете использовать цикл while, чтобы продолжить выборку строк.Функция mysql_fetch_array возвращает false после извлечения всего набора результатов, так что цикл while завершается по желанию.

Кроме того, я удалил цикл foreach на $ids.Поскольку в массиве будет только один элемент, нет необходимости помещать код в цикл.

<?php
$json = json_decode('{
                      "33540116":
                                 {"person":
                                           {"name":"John", "age":"36"}},
                      "33541502":
                                 {"person":                                                                                      
                                           {"name":"Jack", "age":"23"}}
                     }
        ');

$result = mysql_query("SELECT id FROM people");

while ( ( $row = mysql_fetch_array($result) ) ) {
    $id = $row['id'];

    echo $json->$id->person->{'name'}. '<br />';
    echo $json->$id->person->{'age'}. '<br />';
}

?>
0 голосов
/ 16 апреля 2011

У вас есть пара вопросов. Во-первых, вы не должны использовать foreach ($ id как $ id), так как вы используете одну и ту же переменную для обоих. Вместо этого он должен быть foreach ($ id как $ id). Во-вторых, вы можете получить список идентификаторов и вывести правильные значения json следующим образом:

<?php
$json = json_decode('{
                      "33540116":
                                 {"person":
                                           {"name":"John", "age":"36"}},
                      "33541502":
                                 {"person":                                                                                      
                                           {"name":"Jack", "age":"23"}}
                     }
        ');

$result = mysql_query("SELECT id FROM people");

$ids = array();
while($row = mysql_fetch_array($result)) {
    $ids[] = $row['id'];
}

foreach($ids as $id) {

            echo $json->$id->person->{'name'}. '<br />';
            echo $json->$id->person->{'age'}. '<br />';


            }
?>

Надеюсь, что это решит

0 голосов
/ 16 апреля 2011

Вам не нужен цикл foreach, пока достаточно

$result = mysql_query("SELECT id FROM people");
$id = array($row['id']);
while($row = mysql_fetch_array($result))
{
   echo $json->$row['id']->person->{'name'}. '<br />';
   echo $json->$row['id']->person->{'age'}. '<br />';

}
0 голосов
/ 16 апреля 2011

Вы используете это:

$row = mysql_fetch_array($result);

Это будет только выборка одна строка из базы данных.


Если вы хотите получить более одной строки, вам нужно вызвать mysql_fetch_array() в цикле:

while ($row = mysql_fetch_array($result)) {
    // Work with the current row
}


В вашем случае у вас будет что-то вроде этого:

while ($row = mysql_fetch_array($result)) {
    $id = $row['id'];
    echo $json->$id->person->{'name'}. '<br />';
    echo $json->$id->person->{'age'}. '<br />';
}
0 голосов
/ 16 апреля 2011

Попробуйте это:

while($row = mysql_fetch_array($result)) {
    $id = array($row['id']);

    foreach($id as $id) {
                echo $json->$id->person->{'name'}. '<br />';
                echo $json->$id->person->{'age'}. '<br />';
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...