【问题标题】:Displaying value from key/value with associative array in PHP在 PHP 中使用关联数组显示键/值中的值
【发布时间】:2015-03-28 22:32:15
【问题描述】:

我在这里使用这个 json,http://api.wunderground.com/api/72cc0e0d32f5f1ea/history_20150303/q/90210.json

我正在尝试从 json 底部的 dailysummary 数组中检索键/值对。

这是我的代码。它只显示键而不显示值。例如"雾":"0","雨":"1"

有人可以指出我错了吗?非常感谢!

<?php

$json_string = file_get_contents("http://api.wunderground.com/api/72cc0e0d32f5f1ea/history_20150303/q/11374.json");
$parsed_json = json_decode($json_string);

   foreach ($parsed_json->{'history'}->{'dailysummary'}[0] as $key => $val){

      echo $key . ": " . $val . "<br>";
    }

    ?>

这里是json的相关部分

    "dailysummary": [
    { "date": {
    "pretty": "12:00 PM PST on March 03, 2015",
    "year": "2015",
    "mon": "03",
    "mday": "03",
    "hour": "12",
    "min": "00",
    "tzname": "America/Los_Angeles"
    },
    "fog":"0","rain":"1","snow":"0","snowfallm":"0.00", "snowfalli":"0.00","monthtodatesnowfallm":"", "monthtodatesnowfalli":"","since1julsnowfallm":"", "since1julsnowfalli":"","snowdepthm":"", "snowdepthi":"","hail":"0","thunder":"0","tornado":"0","meantempm":"13", "meantempi":"56","meandewptm":"6", "meandewpti":"42","meanpressurem":"1013", "meanpressurei":"29.93","meanwindspdm":"8", "meanwindspdi":"5","meanwdire":"","meanwdird":"281","meanvism":"16", "meanvisi":"10","humidity":"","maxtempm":"17", "maxtempi":"63","mintempm":"9", "mintempi":"48","maxhumidity":"83","minhumidity":"38","maxdewptm":"8", "maxdewpti":"47","mindewptm":"3", "mindewpti":"37","maxpressurem":"1015", "maxpressurei":"29.98","minpressurem":"1012", "minpressurei":"29.88","maxwspdm":"24", "maxwspdi":"15","minwspdm":"0", "minwspdi":"0","maxvism":"16", "maxvisi":"10","minvism":"16", "minvisi":"10","gdegreedays":"6","heatingdegreedays":"10","coolingdegreedays":"0","precipm":"0.25", "precipi":"0.01","precipsource":"","heatingdegreedaysnormal":"","monthtodateheatingdegreedays":"","monthtodateheatingdegreedaysnormal":"","since1sepheatingdegreedays":"","since1sepheatingdegreedaysnormal":"","since1julheatingdegreedays":"","since1julheatingdegreedaysnormal":"","coolingdegreedaysnormal":"","monthtodatecoolingdegreedays":"","monthtodatecoolingdegreedaysnormal":"","since1sepcoolingdegreedays":"","since1sepcoolingdegreedaysnormal":"","since1jancoolingdegreedays":"","since1jancoolingdegreedaysnormal":"" }
    ]

【问题讨论】:

  • 当您对正在迭代的数据执行var_dump 时会得到什么?如,你从var_dump($parsed_json-&gt;{'history'}-&gt;{'dailysummary'}[0]) 得到什么
  • 试试这个:if(!is_object($val)) echo $key . ": " . $val . "&lt;br&gt;"; 这对你有用吗? (还有什么是预期的输出?)
  • @Rizier123 您的解决方案有效。你能解释一下这个检查的作用吗?
  • @ashafique 仅供参考:您可以接受如何最大程度地帮助您并解决您的问题的答案! (meta.stackexchange.com/q/5234)

标签: php arrays json associative-array key-value


【解决方案1】:

这应该适合你:

if(!is_object($val))
    echo $key . ": " . $val . "<br>";

这里我检查值是否不是对象,因为数组中还有一个 stdClass 对象,如果不添加这个 if 语句,它会通过你的错误。

您可以在下面的结构中看到该对象:

[dailysummary] => Array (
    [0] => stdClass Object (

        [date] => stdClass Object (
                //^^^^^^^^^^^^^^^ Here I check that the value is not an object
            [pretty] => 12:00 PM EST on March 03, 2015
            [year] => 2015
            [mon] => 03
            [mday] => 03
            [hour] => 12
            [min] => 00
            [tzname] => America/New_York
        )

        [fog] => 1
        [rain] => 1
        [snow] => 1
        [snowfallm] => 2.54
        [snowfalli] => 1.00
        //...

【讨论】:

    【解决方案2】:

    json_decode( $string, 1 ) 期间使用数组标志更容易循环:

    $json_string = file_get_contents( 'in.json' );
    $parsed_json = json_decode($json_string, 1 );
       foreach ( $parsed_json[ 'dailysummary' ][ 0 ] as $key => $val){
    
            var_dump( $parsed_json[ 'dailysummary' ][ 0 ][ $key ] );
            var_dump( $key );
            var_dump( $val );
          // echo $key . ": " . $parsed_json->dailysummary[ 0 ][ $val ] . "<br>";
        }
    

    【讨论】:

      猜你喜欢
      • 2021-06-14
      • 2015-08-05
      • 2013-02-09
      • 2023-03-27
      • 2015-01-22
      • 1970-01-01
      • 2013-12-03
      • 2016-07-10
      • 1970-01-01
      相关资源
      最近更新 更多