2015-11-22 3 views
0

У меня есть JSON похожее на следующее:PHP - Получение значения JSON из ключевых имен

{ 
    "name": "Activities", 
    "description": "Activities", 
    "parent_group_id": 0, 
    "display": "Activities", 
    "group_id": 7, 
    "stamps": [ 
     { 
      "stamp_id": 14, 
      "name": "Stamp 14", 
      "rank": 2 
     }, 
     { 
      "stamp_id": 20, 
      "name": "Stamp 20", 
      "rank": 4 
     } 
    ] 
}, 
{ 
    "name": "Games", 
    "description": "Games", 
    "parent_group_id": 0, 
    "display": "Games", 
    "group_id": 6, 
    "stamps": [ 
     { 
      "stamp_id": 33, 
      "name": "Stamp 33", 
      "rank": 3 
     }, 
     { 
      "stamp_id": 31, 
      "name": "Stamp 31", 
      "rank": 1 
     } 
    ] 
} 

Я хочу, чтобы получить список каждые из stamp_ids, разделенных запятыми через PHP (например, 14,20,. 33,31)

Я уже пробовал это, не повезло:

$stampsdata  = json_decode($stampsjson, true); 
$numberofstamps = $stampsdata['stamps']['stamp_id']); 

Может кто-нибудь помочь?

+0

Похоже, ваш JSON является недействительным. Объект json может иметь только один корень, но здесь он имеет несколько корневых элементов json. [Подтвердите свой json здесь] (http://jsonlint.com/) –

ответ

3

декодировать JSON с помощью json_decode и использовать array_column для получения идентификаторов.

рабочий раствор:

// true needed to transform object to associative array 
// $json contains your JSON string 

$data = json_decode($json, true); 

$stamps = []; 
foreach ($data as $obj) { 
    $stamps[] = array_column($obj['stamps'], 'stamp_id'); 
} 

// implode sub arrays and concatenate string 
$str = ''; 

foreach ($stamps as $stamp) { 
    $sub = implode(',', $stamp); 
    $str .= $sub . ','; 
} 

// remove trailing comma 
$stampIds = rtrim($str, ','); 
print ($stampIds); 
+0

Можете ли вы предоставить мне пример о том, как заставить это работать в точности? – Spydar007

+0

Отличное решение! Спасибо! – Spydar007

Смежные вопросы