php递归搜索和json中的值计数

时间:2015-08-20 15:40:39

标签: php arrays json recursion

我有一个带有6个对象的json feed,它们都有对象。我有一个ID,我正在尝试搜索并计入另一个对象。

if (isset($_GET['steamusr'])) {
$user = $_GET['steamusr'];
$myinv = 'http://steamcommunity.com/id/'.$user.'/inventory/json/295110/1/';
$content2 = file_get_contents($myinv);
$json2 = json_decode($content2, true);
$imgurlbase = 'http://steamcommunity-a.akamaihd.net/economy/image/';

foreach($json2['rgDescriptions'] as $i){
    $item = $i['market_name'];
    $icon = $i['icon_url'];
    $fetchdata = 'http://steamcommunity.com/market/priceoverview/?appid=295110&currency=1&market_hash_name=' . urlencode($item);
    $grab = file_get_contents($fetchdata);
    $id = json_decode($grab, true);
    $itemid = $i['classid'];
foreach($json2->rgInventory as $i2){
  if($i2->$itemid == $itemid){
    $ci = 0;
    $count = $ci++ ;
    }
}

所有数据首先来自rgDescriptions,然后rgInventory具有要在其中计数的对象数。商品ID来自$ itemid,然后我需要搜索rgInventory,然后从设定值$ itemid计算匹配ID的数量。

我最大的问题是rgInventory有唯一的对象,所以我试图对匹配的classid进行递归/通配符搜索。

json结构可以在这里找到:http://www.jsoneditoronline.org/?url=http://steamcommunity.com/id/fuigus/inventory/json/295110/1/

1 个答案:

答案 0 :(得分:1)

我认为你的代码本质上是正确的,但你并不是在比较正确的东西。

$json = json_decode($content2);
foreach ($json["rgDescriptions"] as $item) {
    $num = 0;
    foreach ($json["rgInventory"] as $inventory_entry) {
        if ($inventory_entry["classid"] === $item["classid"]) {
            $num += 1;
        }
    }
    // do something with $num
    var_dump($item["classid"] . ": " . $num);
}

该行:

if($i2->$itemid == $itemid){

不好,$i2->$itemid解析为$i2->1107865473并不存在。我认为你打算$i2->classid

这样的错误发生是因为您使用了无意义的抽象变量名称。 $i$i2$content2,这些都毫无意义。您还混合了itemidclassid这两个词,很容易让人感到困惑。

此外,您还要混合括号表示法和对象表示法。选择一个并坚持下去。