2013-10-24 121 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