1

我想要做的只是显示“bpm”值...... var_dump 正在显示值,但我仍然无法在屏幕上显示“bpm”值。

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。谢谢你的帮助!

4

4 回答 4

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){

您将数组展平为纯字符串,然后他们尝试将其循环。

我对您要完成的工作一无所知,但您应该从真正了解您的代码的功能开始。输入随机代码直到它碰巧起作用被称为货物崇拜编程,这是一种非常低效的技术。

于 2013-10-24T09:14:15.650 回答
0

用这个:

$decoded_json= json_encode($rows);

print_r($decoded_json);

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

无需$row在 json 中对数组进行编码,如果您对其进行编码,那么您需要先对其进行解码,然后再在 foreach 中使用它以使其成为数组。

于 2013-10-24T09:10:48.317 回答
0

利用

$json = '{"id":"1","bpm":"121 BPM"}';
$decoded_json= json_decode($json);
var_dump($decoded_json->bpm);

以显示。

有关此的更多信息,请查看http://php.net/manual/en/book.json.php

于 2013-10-24T09:11:56.203 回答
0

您的代码中有错误。您的目标是将 $rows 循环添加到数组中,但您不这样做。相反,您使用一个行元素覆盖数组。它发生在这里:

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

您应该将此代码更改为:

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

还可以考虑使用mysqlipdo引擎,因为 mysql_* 函数已弃用。当您更改我所写的代码时,应该对所有行进行编码,而不是仅对一个行(最后一个)进行编码。

第二个问题是您想要循环编码的 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 和数组之间的区别。

于 2013-10-24T09:25:22.063 回答