Декодирование JSON со вставками массива

224
17 апреля 2017, 06:30

Пытаюсь работать с VK API. Но их JSON приходит со множеством массивов в которых другие массивы. Как можно просто достать значение строки photo_2560 из приведенного ниже кода средствами PHP? Если проследить как дойти до этого значения, то получается response->items->attachments->photo->photo_2560

{ 
  "response": { 
    "count": 111, 
    "items": [{ 
      "id": 340403, 
      "from_id": -1, 
      "owner_id": -1, 
      "date": 1475147285, 
      "marked_as_ads": 0, 
      "post_type": "post", 
      "text": "Неумолимо приближаем полный переход API на https-only.  
 
      В запросах к api.vk.com с номером версии 5.56 и выше необходимо использовать https.На запросы с http сервер вернет ошибку с кодом 8. 
 
      Для предыдущих версий возможность работы по http пока остается.Но помните, 
      это ненадолго: vk.com / dev / https_only ", 
      "attachments": [{ 
        "type": "photo", 
        "photo": { 
          "id": 436629769, 
          "album_id": -7, 
          "owner_id": -1, 
          "user_id": 100, 
          "photo_75": "https://pp.userap...53a/5GvlpGM3uLc.jpg", 
          "photo_130": "https://pp.userap...53b/9-uwKQdtulc.jpg", 
          "photo_604": "https://pp.userap...53c/gvgapz0E-y4.jpg", 
          "photo_807": "https://pp.userap...53d/4N8-_djEbxM.jpg", 
          "photo_1280": "https://pp.userap...53e/2rRK8AfqwaU.jpg", 
          "photo_2560": "https://pp.userap...53f/roahF_nheIU.jpg", 
          "width": 1592, 
          "height": 796, 
          "text": "Original: http://cs836329.vk.me/v836329852/42c4/UAku6Pzbar8.jpg", 
          "date": 1475147285, 
          "post_id": 340403, 
          "access_key": "6edae96517b7b26f60" 
        } 
      }], 
      "post_source": { 
        "type": "vk" 
      }, 
      "comments": { 
        "count": 0, 
        "can_post": 0 
      }, 
      "likes": { 
        "count": 137, 
        "user_likes": 0, 
        "can_like": 1, 
        "can_publish": 1 
      }, 
      "reposts": { 
        "count": 12, 
        "user_reposted": 0 
      } 
    }] 
  } 
}

Answer 1

Давай я тебе покажу магию.

Есть такой метод в PHP, называется json_decode, который json строку преобразует в объект или массив - по желанию. И есть функция print_r, которая выводит удобочитаемую информацию о переменной. Комбинируем и получаем, что твоя строка:

$json = '{"response": {
    "count": 111,
    "items": [{
      "id": 340403,
      "from_id": -1,
      "owner_id": -1,
      "date": 1475147285,
      "marked_as_ads": 0,
      "post_type": "post",
      "text": "Неумолимо приближаем полный переход API на https-only. ",
      "attachments": [{
        "type": "photo",
        "photo": {
          "id": 436629769,
          "album_id": -7,
          "owner_id": -1,
          "user_id": 100,
          "photo_75": "https://pp.userap...53a/5GvlpGM3uLc.jpg",
          "photo_130": "https://pp.userap...53b/9-uwKQdtulc.jpg",
          "photo_604": "https://pp.userap...53c/gvgapz0E-y4.jpg",
          "photo_807": "https://pp.userap...53d/4N8-_djEbxM.jpg",
          "photo_1280": "https://pp.userap...53e/2rRK8AfqwaU.jpg",
          "photo_2560": "https://pp.userap...53f/roahF_nheIU.jpg",
          "width": 1592,
          "height": 796,
          "text": "Original: http://cs836329.vk.me/v836329852/42c4/UAku6Pzbar8.jpg",
          "date": 1475147285,
          "post_id": 340403,
          "access_key": "6edae96517b7b26f60"
        }
      }],
      "post_source": {
        "type": "vk"
      },
      "comments": {
        "count": 0,
        "can_post": 0
      },
      "likes": {
        "count": 137,
        "user_likes": 0,
        "can_like": 1,
        "can_publish": 1
      },
      "reposts": {
        "count": 12,
        "user_reposted": 0
      }
    }]
  }
}';

в результате преобразований:

$response = json_decode($json, true);
echo '<pre>';
echo(print_r($response));
echo '</pre>';

оказывается, имеет вид массива:

Array
(
    [response] => Array
        (
            [count] => 111
            [items] => Array
                (
                    [0] => Array
                        (
                            [id] => 340403
                            [from_id] => -1
                            [owner_id] => -1
                            [date] => 1475147285
                            [marked_as_ads] => 0
                            [post_type] => post
                            [text] => Неумолимо приближаем полный переход API на https-only. 
                            [attachments] => Array
                                (
                                    [0] => Array
                                        (
                                            [type] => photo
                                            [photo] => Array
                                                (
                                                    [id] => 436629769
                                                    [album_id] => -7
                                                    [owner_id] => -1
                                                    [user_id] => 100
                                                    [photo_75] => https://pp.userap...53a/5GvlpGM3uLc.jpg
                                                    [photo_130] => https://pp.userap...53b/9-uwKQdtulc.jpg
                                                    [photo_604] => https://pp.userap...53c/gvgapz0E-y4.jpg
                                                    [photo_807] => https://pp.userap...53d/4N8-_djEbxM.jpg
                                                    [photo_1280] => https://pp.userap...53e/2rRK8AfqwaU.jpg
                                                    [photo_2560] => https://pp.userap...53f/roahF_nheIU.jpg
                                                    [width] => 1592
                                                    [height] => 796
                                                    [text] => Original: http://cs836329.vk.me/v836329852/42c4/UAku6Pzbar8.jpg
                                                    [date] => 1475147285
                                                    [post_id] => 340403
                                                    [access_key] => 6edae96517b7b26f60
                                                )
                                        )
                                )
                            [post_source] => Array
                                (
                                    [type] => vk
                                )
                            [comments] => Array
                                (
                                    [count] => 0
                                    [can_post] => 0
                                )
                            [likes] => Array
                                (
                                    [count] => 137
                                    [user_likes] => 0
                                    [can_like] => 1
                                    [can_publish] => 1
                                )
                            [reposts] => Array
                                (
                                    [count] => 12
                                    [user_reposted] => 0
                                )
                        )
                )
        )
)

Надеюсь тебя не надо учить работать с массивами?

READ ALSO
Как правильно сделать переключатели в php?

Как правильно сделать переключатели в php?

Здравствуйте, столкнулся с такой проблемой

282
json_encode в opencart

json_encode в opencart

Добрый вечер!

316
Разбиение частей массива на переменные

Разбиение частей массива на переменные

ЗдравствуйтеНа данном этапе задача такова: Я получаю ячейку из базы, содержание которой:

280