2015-09-16 47 views
2

我想要做的是基本上選擇一個數組內的數組並打印它想打印的內容。這是數組。PHP數組,選擇打印一個特定的元素及其內容

{"success":true,"rgInventory":{"3480848569":{"id":"3480848569","classid":"991959905","instanceid":"0","amount":"1","pos":1},"3480576615":{"id":"3480576615","classid":"937248085","instanceid":"188530139","amount":"1","pos":2},"3480546604":{"id":"3480546604","classid":"1289504012","instanceid":"188530139","amount":"1","pos":3},"3480019616":{"id":"3480019616","classid":"1287503583","instanceid":"188530139","amount":"1","pos":4},"3480018692":{"id":"3480018692","classid":"1287539933","instanceid":"188530139","amount":"1","pos":5},"3468858273":{"id":"3468858273","classid":"310796325","instanceid":"188531406","amount":"1","pos":6},"3461024351":{"id":"3461024351","classid":"1285429560","instanceid":"0","amount":"1","pos":7},"3458814606":{"id":"3458814606","classid":"1285140836","instanceid":"188531307","amount":"1","pos":8},"3456892821":{"id":"3456892821","classid":"1283034897","instanceid":"188530398","amount":"1","pos":9},"3446207634":{"id":"3446207634","classid":"1280315186","instanceid":"0","amount":"1","pos":10},"3243469958":{"id":"3243469958","classid":"1232873338","instanceid":"480085569","amount":"1","pos":11},"3144270103":{"id":"3144270103","classid":"1290987654","instanceid":"1210747767","amount":"1","pos":12}} 

我想打印「rgInventory」和陣列中的我想不僅打印的主要項目,但也有些人裏面的內容SICH id和CLASSID。

這是我的代碼。

<?php 
       if(empty($_SESSION['steamid'])){ 
        echo 'Please sign in to view your items.'; 
       }else{ 
        $id = $steamprofile['steamid']; 
        $key = 'xxxxxxxxxxxxxxxxxxxxxxxxxx'; 
        if($id != null){ 
         $link = file_get_contents('http://steamcommunity.com/profiles/'.$id.'/inventory/json/730/2'); 
         $inventory = json_decode($link, true); 
         //print_r ($inventory); 
         print(sizeof($inventory)); 
         foreach($inventory as $item => $id){ 
          for($x = 0; sizeof($item[1]) <= $x; $x+=0){ 
           echo 'ID: '.$id; 
          } 
         } 
        } 
       } 
      ?> 

這是我只是想弄明白這是如何工作的。數組讓我困惑,所以任何解釋都會有所幫助,值得讚賞。

+0

'$ steamprofile'從哪裏來?它從來沒有在你的代碼中設置。另外,JSON似乎是無效的......你從不檢查'json_decode'的返回值。 –

+0

@ SverriM.Olsen'$ steamprofile'包含在其他地方,並且json是有效的,你只是不能恢復它,除非你有蒸汽id(在我的網站上登錄並存儲在'$ steamprofile'中時給出。該陣列如此經常只是短路通過它提及 然而,如果你必須在這裏看到它是這樣的:http://steamcommunity.com/profiles/76561197994925827/inventory/json/730/2 – mtcamesao

+1

你的json數組 –

回答

1

我想通了。

if ($inventory['success']) { print "SUCCESS = TRUE<br>"; } 
           foreach ($inventory['rgDescriptions'] as $rgDescription) { 
            for($i = 0; sizeof($rgDescription['market_name']) > $i; $i++){ 
             if(isset($rgDescription['market_name'])){ 
              print '<td>'.$rgDescription['market_name'].'</td>'; 
             } 
            } 
           } 

謝謝迪恩指着我在正確的方向。

0

以你的JSON字符串,並在結尾處增加一個大括號,那麼你可以得到的數據不與json_decode

例如

$link = '{"success":true,"rgInventory":{"3480848569":{"id":"3480848569","classid":"991959905","instanceid":"0","amount":"1","pos":1},"3480576615":{"id":"3480576615","classid":"937248085","instanceid":"188530139","amount":"1","pos":2},"3480546604":{"id":"3480546604","classid":"1289504012","instanceid":"188530139","amount":"1","pos":3},"3480019616":{"id":"3480019616","classid":"1287503583","instanceid":"188530139","amount":"1","pos":4},"3480018692":{"id":"3480018692","classid":"1287539933","instanceid":"188530139","amount":"1","pos":5},"3468858273":{"id":"3468858273","classid":"310796325","instanceid":"188531406","amount":"1","pos":6},"3461024351":{"id":"3461024351","classid":"1285429560","instanceid":"0","amount":"1","pos":7},"3458814606":{"id":"3458814606","classid":"1285140836","instanceid":"188531307","amount":"1","pos":8},"3456892821":{"id":"3456892821","classid":"1283034897","instanceid":"188530398","amount":"1","pos":9},"3446207634":{"id":"3446207634","classid":"1280315186","instanceid":"0","amount":"1","pos":10},"3243469958":{"id":"3243469958","classid":"1232873338","instanceid":"480085569","amount":"1","pos":11},"3144270103":{"id":"3144270103","classid":"1290987654","instanceid":"1210747767","amount":"1","pos":12}}}'; 

$inventory = json_decode($link, true); 

if ($inventory['success']) { print "SUCCESS = TRUE<br>"; } 
foreach ($inventory['rgInventory'] as $rgInventory) { 
    foreach ($rgInventory as $key => $value) { 
     print "$key=$value, "; 
    } 
    print "<br>"; 
} 

這將輸出:

SUCCESS = TRUE 
id=3480848569, classid=991959905, instanceid=0, amount=1, pos=1, 
id=3480576615, classid=937248085, instanceid=188530139, amount=1, pos=2, 
id=3480546604, classid=1289504012, instanceid=188530139, amount=1, pos=3, 
id=3480019616, classid=1287503583, instanceid=188530139, amount=1, pos=4, 
id=3480018692, classid=1287539933, instanceid=188530139, amount=1, pos=5, 
id=3468858273, classid=310796325, instanceid=188531406, amount=1, pos=6, 
id=3461024351, classid=1285429560, instanceid=0, amount=1, pos=7, 
id=3458814606, classid=1285140836, instanceid=188531307, amount=1, pos=8, 
id=3456892821, classid=1283034897, instanceid=188530398, amount=1, pos=9, 
id=3446207634, classid=1280315186, instanceid=0, amount=1, pos=10, 
id=3243469958, classid=1232873338, instanceid=480085569, amount=1, pos=11, 
id=3144270103, classid=1290987654, instanceid=1210747767, amount=1, pos=12, 

您可以使用在線工具檢查JSON編碼如http://json.parser.online.fr/

另外,雖然你出來的各種陣列上工作,你可以使用var_dump()

eg

var_dump($rgInventory); 

它會告訴你數組的組成,所以你知道如何去你需要的部分。

+0

該數組不是一個集合數組,它通過一個可以隨時更新的url,我發佈的只是一個例子 – mtcamesao

+0

如果json的結構發生變化,那麼只需要一些在抽出你需要的內容之前弄清楚它是什麼的邏輯。 –