同时与foreach一起循环

时间:2011-04-16 15:25:52

标签: php json 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的记录感兴趣。

为此,我用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,姓名和年龄。

如何使用这些结果更新此表?

再次感谢。

5 个答案:

答案 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 />';


            }
?>

希望能解决它