Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
json和PHP解析_Php_Json_Parsing - Fatal编程技术网

json和PHP解析

json和PHP解析,php,json,parsing,Php,Json,Parsing,为什么我不能用PHP从json文件中获取值? 我得到零值?我已经试了好几个小时了 <?php $json_string = 'http://pubapi.cryptsy.com/api.php?method=singlemarketdata&marketid=44'; $jsondata = file_get_contents($json_string); $data = json_decode($jsondata, TRUE); print_r($data);

为什么我不能用PHP从json文件中获取值? 我得到零值?我已经试了好几个小时了

    <?php


$json_string = 'http://pubapi.cryptsy.com/api.php?method=singlemarketdata&marketid=44';

$jsondata = file_get_contents($json_string);

$data = json_decode($jsondata, TRUE);

print_r($data);

echo "<br><br><br><br>";

foreach ($data as $recenttrades) {
    echo "VALUES('{$recenttrades->quantity}', '{$recenttrades->price}' ";
}


?>

recenttrades
在该数组中嵌套得相当深。试一试

foreach ($data['return']['markets']['FST']['recenttrades'] as $recenttrades) {

recenttrades
是多层次嵌套的,因此仅对每个($recenttrades)执行
foreach($recenttrades)是不够的

您需要执行以下操作:

$recentTrades = $data['return']['markets']['FST']['recenttrades'];

foreach($recentTrades as $recentTrade) {
   ...
}

recenttrades
嵌套得很深,您需要的是数组,而不是对象。这似乎有效:

foreach ($data['return']['markets']['FST']['recenttrades'] as $recenttrades) {
    echo "VALUES('{$recenttrades['quantity']}', '{$recenttrades['price']}' ";
}

其他人提到,您处理的是嵌套数组,而不是对象。除了指出嵌套相当深的问题外,我还建议使用
foreach
(我可能会因此而被钉死):


为了响应您的更新,如果您想在市场上循环,请尝试以下操作:

foreach($data['return']['markets']作为$market){
echo“主代码:{$market['primarycode']}
”; foreach($market[“recenttrade”]作为$recenttrade){ 回显“数量:.$recenttrade['quantity']。”,价格:“$recenttrade['price']。”
”; } }
我可能错了,但如果第二个参数=true,则会得到一个关联数组。但是在这里,你试图从一个对象中访问值,如果你想返回一个对象,这可能有助于删除TRUE。但是我怎样才能在循环中找到其他人呢?我已经尝试过这样做:你可以复制我在
$recenttrade
上执行的
echo
/
print\r
块,并将其应用于
foreach
序列的每个级别。这将显示给定级别上可用的每个
$key=>$val
对。这有意义吗?
foreach ($data['return']['markets']['FST']['recenttrades'] as $recenttrades) {
    echo "VALUES('{$recenttrades['quantity']}', '{$recenttrades['price']}' ";
}
     <?php


$json_string = 'http://pubapi.cryptsy.com/api.php?method=singlemarketdata&marketid=44';

$jsondata = file_get_contents($json_string);

$data = json_decode($jsondata, TRUE);

//print_r($data);

echo "<br><br><br><br>";

foreach ($data as $markets) {
  foreach($markets as $market) {
    foreach($market as $attributes) {
      foreach($attributes["recenttrades"] as $recenttrade) { 
        //echo "<pre>";
        //print_r($recenttrade);
        //echo "</pre>";
        echo "VALUES('{quantity: " . $recenttrade['quantity'] ."}', 'price: {" . $recenttrade['price'] . "}')";
      }
    }
  }
}
foreach ($data['return']['markets'] as $market) {
  echo "Primary code: <strong>{$market['primarycode']}</strong><br>";
  foreach ($market["recenttrades"] as $recenttrade) {
      echo "quantity: " . $recenttrade['quantity'] .", price: " . $recenttrade['price'] . "<br>";
  }
}