2011-04-16 146 views
1

我真的陷入了困境,試圖解決什麼應該很簡單。雖然循環與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,名稱和年齡的人的表。

如何使用這些結果更新此表?

再次感謝。

回答

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

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

} 
+0

謝謝gyus。有效。正如你所建議的,我最終放棄了這個習慣。 – jamester 2011-04-16 18:31:36

0

你有幾個問題。首先,你不應該使用foreach($ id as $ 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 />'; 


      } 
?> 

希望這將解決這個問題