2016-04-25 56 views
5

我一直在尋找遍佈interwebz的一個簡單的答案,但找不到任何。所以,問題是:PHP Json查看是否存在值

我打算解碼一些JSON來查看是否存在一個值;儘管如此,我認爲我沒有做對。我想檢查appid:730的值是否存在。

這裏的JSON:

{ 
response: { 
    game_count: 106, 
     games: [ 
      { 
      appid: 10, 
      playtime_forever: 67 
      }, 
      { 
      appid: 730, 
      playtime_forever: 0 
      }, 
      { 
      appid: 368900, 
      playtime_forever: 0 
      }, 
      { 
      appid: 370190, 
      playtime_forever: 0 
      }, 
     ] 
    } 
} 

這就是我想要的:

$json = file_get_contents('JSON URL HERE'); 
$msgArray = json_decode($json, true); 

if (appid: 730 exists) { 
    ... 
} 

謝謝,希望我解釋不夠。

+0

1.在foreach中使用'$ msgArray',然後在tree下查找'games'數組。 –

+0

'json'沒有迴應... [無效的Json](https://3v4l.org/ld9Oa) –

回答

2

首先,你有無效的JSON。請參閱下面字符串減速中的註釋(這可能是您的問題中的拼寫錯誤)。

$json = '{ 
"response": { 
    "game_count": 106, 
    "games": [ 
     { 
      "appid": 10, 
      "playtime_forever": 67 
     }, 
     { 
      "appid": 730, 
      "playtime_forever": 0 
     }, 
     { 
      "appid": 368900, 
      "playtime_forever": 0 
     }, 
     { 
      "appid": 370190, 
      "playtime_forever": 0 
     } // <------ note the lack of `,` 
     ] 
    } 
}'; 

$arr = json_decode($json, true); 

foreach($arr['response']['games'] as $game) { 
    if($game['appid'] === 730) { // I would strictly check (type) incase of 0 
     echo "exists"; // or do something else 
     break; // break out if you dont care about the rest 
    } 
} 

example

我們只是通過遊戲陣列循環並檢查其appid。然後,我們只是做一些事情,然後打破循環,以防止開銷。

0
json_decode() 

實際上是要返回解碼的JSON。 JSON是一個字符串,解碼後的JSON是一個對象數組。

您將需要遍歷該對象數組來檢查每個對象。

$msgArray = json_decode($json); 

foreach($msgArray->response->games as $game) { 
    if($game->appid == 730) { 
     // it exists 
    } 
} 
+1

他使用第二個參數的真標誌,使其成爲一個數據數組而不是數據對象。 –

+0

好的......我不認爲那是他的問題。我只是試圖指導他看看解碼json導致的數據結構中的每個數據實體。 – jcorry

+1

好吧,如果他被其他人告知使用陣列,不要讓他混淆不同的類型。 –

0

試試這個

$json = file_get_contents('JSON URL HERE'); 
$msgArray = json_decode($json, true); 

foreach($msgArray['response']['games'] as $key => $value){ 
    if ($value['appid'] == 730) { 
    //do something 
    }else{ 
    // do else 
    } 
} 
+0

'$ value.appid'不正確,JS比PHP更多。正確的是'$ value ['appid']' –

+0

是的,我犯了錯誤,謝謝:-) –

0

我覺得這個解決方案相當簡單:

$r='{ 
"response": { 
    "game_count": 106, 
     "games": [ 
      { 
      "appid": 10, 
      "playtime_forever": 67 
      }, 
      { 
      "appid": 730, 
      "playtime_forever": 0 
      }, 
      { 
      "appid": 368900, 
      "playtime_forever": 0 
      }, 
      { 
      "appid": 370190, 
      "playtime_forever": 0 
      } 
     ] 
    } 
}'; 

function find($arr, $id) { 
    if(!empty($arr)) 
     foreach ($arr as $key => $value) { 
      if(isset($value->appid) && $value->appid == $id) 
       return true; 
     } 
    return false; 
} 

$obj = json_decode($r); 
if(isset($obj) && isset($obj->response)) { 
    if(isset($obj->response->games) && !empty($obj->response->games)) 
     $arr = $obj->response->games; 
    else 
     $arr = array(); 
} else { 
    echo "NOT valid found\n"; 
} 

$appid = 730; 

if(find($arr, $appid)) 
    echo "Appid $appid found\n"; 
else 
    echo "Appid $appid NOT found\n"; 

這是非常方便解析和驗證結果從其他Web服務來訪問他們的數據之前,所以我們避免和開發時間。

我希望這是你在找什麼。