PHP:如何解决非法的字符串偏移量?

时间:2018-12-25 13:54:25

标签: php json

我正在尝试使用json_decode函数来获取数据。

以下是print_r个结果:

Array
(
    [ticker] => Array
        (
            [base] => BTC
            [target] => USD
            [price] => 3796.85831297
            [volume] => 173261.82951203
            [change] => 6.29130608
        )

    [timestamp] => 1545745501
    [success] => 1
    [error] => 
)

当我想用foreach调用价格值时,它会显示该值,但出现此错误:

  

警告:字符串偏移量“价格”非法

foreach ($json as $key => $value) {
       $price = $value['price'];
       echo '<br>' . $price;
}

以下是var_dump个结果:

array(4) {
  ["ticker"]=>
  array(5) {
    ["base"]=>
    string(3) "BTC"
    ["target"]=>
    string(3) "USD"
    ["price"]=>
    string(13) "3796.85831297"
    ["volume"]=>
    string(15) "173261.82951203"
    ["change"]=>
    string(10) "6.29130608"
  }
  ["timestamp"]=>
  int(1545745501)
  ["success"]=>
  bool(true)
  ["error"]=>
  string(0) ""
}

有人认为我的问题可能是this question的重复。但是echo $json['price'];什么也没显示!

4 个答案:

答案 0 :(得分:3)

您可以使用array_column

$price = array_column($json, 'price');
echo $price[0];

答案 1 :(得分:3)

您的方法确定,但是您必须确保$value是一个数组,并且包含price键,否则您将获得

  

警告:字符串偏移量“价格”非法

要解决此问题,您可以在 $ value 上使用is_array(),在 $ value ['price'] isset()和!empty() >

foreach ($json as $key => $value) {
      if(is_array($value) && isset($value['price']) && !empty($value['price'])){
        $price = $value['price'];
        echo '<br>' . $price;
      }
}

答案 2 :(得分:2)

确保$ value是一个数组并且包含键。

foreach ($json as $key => $value) {
       if(is_array($value) && isset($value['price']))
       {
           $price = $value['price'];
           echo '<br>' . $price;
       }
}

答案 3 :(得分:0)

尝试一下:

foreach ($json as $key => $value) {
   $price = $value['ticker']['price'];
   echo '<br>' . $price;
}

您的price键嵌套在ticker内一层深的位置

希望这会有所帮助。