我真的很难解决什么应该很简单。
我有这个
<?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 select语句替换了上面的id数组字符串。
<?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个结果。 我真正需要的是循环结果。 不幸的是,我不知道如何与foreach一起构建while循环。
非常感谢您的帮助。
更新(额外问题)
谢谢大家。你帮助我解决了这个问题。
但是,我还有另一个与此事有关的问题。
我上面提到过,我只想回应结果。 但这并不完全正确。 我真正想要做的是使用从json文件中检索到的结果更新相同的mysql表。
我有一张名为人物的表格,其中包含字段ID,姓名和年龄。
如何使用这些结果更新此表?
再次感谢。
答案 0 :(得分:1)
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 />';
}
?>
答案 1 :(得分:0)
试试这个:
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 />';
}
}
答案 2 :(得分:0)
你正在使用这个:
$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 />';
}
答案 3 :(得分:0)
你不需要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 />';
}
答案 4 :(得分:0)
你有几个问题。首先,您不应该使用foreach($ id作为$ id),因为您对两者使用相同的变量。相反它应该是foreach($ ID为$ 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 />';
}
?>
希望能解决它