简体   繁体   中英

Getting data from nested arrays in json with php

I have my json from a url feed. Here's a sample below. I'm not doing the foreach loop correctly is the problem

{
    "useLive": true,
    "models": [
        {
            "snapshotUrl": "https://img-eu.whatevercdn.com/eu7/previews/1537971705/5293074",
            "widgetPreviewUrl": "https://img-eu.whatevercdn.com/eu7/previews/1537971705/5293074",
            "id": 5293074,
            "country": "",
            "gender": "female",
            "isNew": false,
            "previewUrl": "https://st.whatevercdn.com/cdn/previews/b/a/a/baa515a42e75d80b0dc1e7a75bf4ea0f-full",
            "previewUrlThumbBig": "https://st.whatevercdn.com/cdn/previews/b/a/a/baa515a42e75d80b0dc1e7a75bf4ea0f-thumb-big",
            "previewUrlThumbSmall": "https://st.whatevercdn.com/cdn/previews/b/a/a/baa515a42e75d80b0dc1e7a75bf4ea0f-thumb-small",
            "broadcastGender": "female",
            "snapshotServer": "eu7",
            "tags": ["autoTagPopular","keyword","keyword2"],
            "topBestPlace": 0,
            "username": "model1",
            "languages": ["en"],
            "stripScore": 998.5,
            "token": "93021860dbebd5ba27e604f6b4b93754"
        },
        {
            "snapshotUrl": "https://img-eu.whatevercdn.com/eu8/previews/1537971700/6492104",
            "widgetPreviewUrl": "https://img-eu.whatevercdn.com/eu8/previews/1537971700/6492104",
            "id": 6492104,
            "country": "",
            "gender": "female",
            "isNew": false,
            "previewUrl": "https://st.whatevercdn.com/cdn/previews/2/b/3/2b366955f5a66d73ee038d43bf77c99b-full",
            "previewUrlThumbBig": "https://st.whatevercdn.com/cdn/previews/2/b/3/2b366955f5a66d73ee038d43bf77c99b-thumb-big",
            "previewUrlThumbSmall": "https://st.whatevercdn.com/cdn/previews/2/b/3/2b366955f5a66d73ee038d43bf77c99b-thumb-small",
            "broadcastGender": "female",
            "snapshotServer": "eu8",
            "tags": ["autoTagPopular","keyword","keyword2"],
            "topBestPlace": 0,
            "username": "model2",
            "languages": [],
            "stripScore": 997.25,
            "token": "2c6ee95270f6faf76cd33321732136e3"
        }
    ],
    "ttl": 15,
    "tagType": "F+T",
    "tagName": "Featured",
    "defaultTags": [
        {
            "name": "whatever1",
            "url": "/tags/whatever1"
        },
        {
            "name": "whatever2",
            "url": "/tags/whatever2"
        },
        {
            "name": "whatever3",
            "url": "/tags/whatever3"
        }
    ],
    "serverTime": "2018-09-26T14:23:00Z"
}

Here's my php code so far. I've tried quite a few different things. I normally use xml feeds which seem to be easy for me to setup for what I need. I'm not sure what I'm missing here.

$url = 'https://whatever.com/api/external/v4/widget?userId=whatever&tag=featured'; // path to your JSON file
$data = file_get_contents($url); // put the contents of the file into a variable
$performers = json_decode($data, true); // decode the JSON feed

foreach ($performers as $performer) {
  $info = $performer[0]["username"];
  echo $info;
}

I'm only getting the first username and then error messages.

Warning: Illegal string offset 'username' in /whatever

Can anyone help with this?

You should use $performers['models'] array in foreach and then get username it will work fine try the following code

$performers = json_decode($data, true); 
if(isset($performers['models'])){   
    foreach ($performers['models'] as $performer) {
        $info = (isset($performer["username"])) ? $performer["username"] : '';
        echo $info;
        echo "<br>";
    }   
}

Output

model1
model2

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM