2013-10-24 160 views
1

我想要做的只是顯示「bpm」值... var_dump顯示值,但我仍然無法顯示「bpm」值到屏幕。用php顯示json數據

PHP文件

<?php 

    include ('open.php'); //open database connection 

$sth = mysql_query("SELECT * FROM heartbeatTB"); 
$rows = array(); 
while($r = mysql_fetch_assoc($sth)) { 
    $rows = $r; 
} 

$decoded_json= json_encode($rows); 

print_r($decoded_json); 

foreach($decoded_json as $de){ 
echo $de['id']['bpm']; }  //not displaying output 
echo "<br><br>"; 

var_dump($decoded_json); 

echo "<br><br>endd"; 

mysql_close($con); 
?> 

結果:

success connected!! 
{"id":"1","bpm":"121 BPM"} //json string 

          //result should appear here 

string(26) "{"id":"1","bpm":"121 BPM"}" //var_dump output 


endd 

任何幫助表示讚賞

* *我最後的工作代碼

<?php 

include ('open.php'); 

$sth = mysql_query("SELECT bpm FROM heartbeatTB"); 
//$rows = array(); 
while($r = mysql_fetch_assoc($sth)) { 
    $rows = $r; 
} 

$string_json= json_encode($rows); 

print_r($string_json); //////////////// 

echo "<br><br>"; 

$result=json_decode($string_json); 

var_dump($result->bpm); ////////////// 

echo "<br><br> the answer :".$result->bpm ; 


echo "<br><br>"; 

var_dump($string_json); //////////// 

echo "<br><br>end"; 

mysql_close($con); 
?> 

加上我更改數據庫從拉丁到UTF8的排序規則。 thx幫助!

+0

爲什麼json在這裏? – underscore

+0

將'$ rows = $ r;'更改爲'$ rows [] = $ r;'您不需要向數組添加新元素,但是您在循環 – Robert

+0

thx用於提醒時覆蓋數組。 – wayne9003

回答

0

代碼中有錯誤。你的目標是在數組中循環添加$行,但你不這樣做。相反,您可以用一個行元素覆蓋該數組。它發生在這裏:

while($r = mysql_fetch_assoc($sth)) { 
    $rows = $r; //error 
} 

您應該將此代碼更改爲:

while($r = mysql_fetch_assoc($sth)) { 
    $rows[] = $r; 
} 

因爲mysql_ *函數depracated還要考慮使用的mysqliPDO引擎。當我在寫代碼時更改代碼時,應該對所有行進行編碼,而不是僅對其中一個(這是最後一行)進行編碼。

第二個問題是,你想循環編碼的json字符串,它是字符串而不是數組。您應該循環後$rows

foreach($rows as $row) print_r($rows); 

,或者你可以用

$decoded_json= json_encode($rows); 
$arr = json_decode($decoded_json); 
foreach($arr as $r) print_r($r); 

解碼字符串,但我不建議這樣做。你應該看到編碼爲字符串的json和數組之間的區別。

+0

主要問題來自我的數據庫的整理。我只是將拉丁語(不支持JSON)更改爲UTF8,並且它可以工作! – wayne9003

0

使用本:

$decoded_json= json_encode($rows); 

print_r($decoded_json); 

foreach($rows as $de){ 
    echo $de['bpm']." : ".$rows['id']; 
} 

沒有必要的$row陣列JSON編碼,如果您的編碼它,那麼你需要將它用它在foreach,使其作爲陣列之前首先進行解碼。

1

我可以在代碼中發現一些奇特:

while($r = mysql_fetch_assoc($sth)) { 
    $rows = $r; 
} 

您檢索和存儲幾行,然後丟棄所有的人,但最後一個。

$decoded_json= json_encode($rows); 

您將數據編碼爲JSON並將其存儲在名爲$decoded_json的變量中。

// string(26) "{"id":"1","bpm":"121 BPM"}" 
foreach($decoded_json as $de){ 

你把你的數組變成一個普通的字符串,他們試圖循環它。

我並不知道自己想要完成什麼,但應該從實際瞭解代碼的功能開始。鍵入隨機代碼直到它正常工作稱爲cargo-cult programming,這是一種非常低效的技術。

+0

+1對於所有奇怪的東西在問題 –

+0

的詳細列表我很抱歉的怪異.. decode_json應該定義爲string_json.2nd,我只有1個數據在我的表中。所以沒有任何關係到「丟棄」,對不起這又是我的錯。 *順便說一句,我剛剛意識到這個問題。 thx – wayne9003