В то время как петля вместе с foreach

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

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

<?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 выше инструкцией select 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.

У меня есть таблица, называемая людьми с именами полей, именем и возрастом.

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

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

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 />'; } ?> 

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

 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 />'; } } 

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

 $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 />'; } 

Вам не нужен цикл 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 />'; } 

У вас есть пара вопросов. Во-первых, вы не должны использовать foreach ($ id как $ id), так как вы используете одну и ту же переменную для обоих. Вместо этого он должен быть foreach ($ ids как $ 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 />'; } ?> 

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