【问题标题】:While loop together with foreachwhile 循环与 foreach 一起
【发布时间】:2011-08-06 22:43:57
【问题描述】:

我真的很难解决应该很简单的问题。

我有这个

<?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 匹配的某些记录感兴趣。

为此,我将上面的 id 数组字符串替换为 mysql select 语句。

<?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 表。

我有一个名为 people 的表,其中包含 id、name 和 age 字段。

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

再次感谢。

【问题讨论】:

    标签: php json foreach


    【解决方案1】:

    mysql_fetch_array 一次只获取一行。您可以使用while 循环继续获取行。一旦获取了整个结果集,mysql_fetch_array 函数就会返回false,这样会导致while 循环根据需要终止。

    另外,我删除了$ids 上的foreach 循环。由于数组中只有一个元素,因此无需将代码放入循环中。

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

    【讨论】:

      【解决方案2】:

      试试这个:

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

      【讨论】:

        【解决方案3】:

        你正在使用这个:

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

        【讨论】:

          【解决方案4】:

          你不需要foreach循环,while就够了

          $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。
          【解决方案5】:

          您有几个问题。首先,您不应该使用 foreach($id as $id) 因为您对两者都使用相同的变量。相反,它应该是 foreach($ids as $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 />';
          
          
                      }
          ?>
          

          希望可以解决

          【讨论】:

            猜你喜欢
            • 2013-07-06
            • 2013-06-27
            • 2014-12-05
            • 1970-01-01
            • 2015-07-03
            • 2013-10-01
            • 2014-04-11
            • 1970-01-01
            • 2017-07-14
            相关资源
            最近更新 更多