2013-03-15 23 views
0
<?php 
     $json_string = file_get_contents('infile.json'); 
     $get_json_values=json_decode($json_string,true); 

      foreach ($get_json_values as $key=>$getlikes) { 
       if($getlikes[$key]['type']=='like') { 

       ?> 
       <div><p><?php echo $getlikes['name'] ?></p></div> 
      <?php 
      }} 
      ?> 

上面的代碼中有一個錯誤:未定義的行與if的偏移量。我想這是因爲$getlikes[$key]['type']是錯誤的。通過type屬性獲得「喜歡」的所有對象的正確代碼是什麼?從json獲取屬性的正確方法

的Json可以從here

+1

請將您的JSON – peterm 2013-03-15 01:55:23

回答

2

下載這真的取決於你的上傳.json對象的內容。但最有可能的原因是未定義的偏移量,因爲不是所有的$ getlikes [$ key]都有一個'type'數組鍵。在比較之前驗證它是否存在。嘗試

foreach ($get_json_values as $key=>$getlikes) { 
    if(!isset($getlikes['type'])) continue; 
     if($getlikes['type']=='like') { 
    .... 

編輯:基於您以.json文件,你只是增加一個額外的關鍵這是不必要的

。更改了代碼以反映正確的呼叫。檢查是否設置了值仍然不是一個壞主意。嘗試一下var_dump($ getlikes)或者你正在使用的文件來仔細檢查你正在迭代的內容。

+0

+1顯示爲'isset()' – 2013-03-15 01:57:31

+0

不再顯示任何內容,但它們都具有「type」鍵。我上傳了json – 2013-03-15 02:10:32

+0

編輯我的答案正確的迭代。您使用$ getlikes [$ key],您可能打算使用$ get_json_values [$ key] – 2013-03-15 02:28:05

1

鑑於JSON字符串,很明顯你做錯了什麼。 $ get_json_values是一個沒有索引的列表,你正在翻倍,很難解釋。代之以做。

foreach ($get_json_values as $getlikes) { 
    if($getlikes['type']=='like') { 

如果你使用$鍵,你會使用這樣

foreach ($get_json_values as $key=>$getlikes) { 
    if($get_json_values[$key]['type']=='like') { 

,但你不會那樣做呢。 Foreach逐個提取元素。