Dennis
Dennis

Reputation: 1

Get specific item from JSON result with PHP

i need help with my JSON data. I try to get only a special value, without knowing exactly which one.

That's my JSON data:

            {
        "JourneyDetail":{
        "Stops":{
        "Stop":[{
        "name":"Essen Hbf",
        "id":"8000098",
        "lon":"7.014795",
        "lat":"51.451351",
        "routeIdx":"2",
        "arrTime":"10:38",
        "arrDate":"2018-02-22",
        "depTime":"10:41",
        "depDate":"2018-02-22",
        "track":"2"
        },{
        "name":"Duisburg Hbf",
        "id":"8000086",
        "lon":"6.775907",
        "lat":"51.429786",
        "routeIdx":"3",
        "arrTime":"10:52",
        "arrDate":"2018-02-22",
        "depTime":"10:55",
        "depDate":"2018-02-22",
        "track":"3"
        },{
        "name":"Düsseldorf Hbf",
        "id":"8000085",
        "lon":"6.794317",
        "lat":"51.219960",
        "routeIdx":"4",
        "arrTime":"11:06",
        "arrDate":"2018-02-22",
        "depTime":"11:08",
        "depDate":"2018-02-22",
        "track":"16"
        },{
        "name":"Köln Messe/Deutz Gl.11-12",
        "id":"8073368",
        "lon":"6.974065",
        "lat":"50.941717",
        "routeIdx":"5",
        "arrTime":"11:28",
        "arrDate":"2018-02-22",
        "depTime":"11:30",
        "depDate":"2018-02-22",
        "track":"11"
        },{
        "name":"Siegburg/Bonn",
        "id":"8005556",
        "lon":"7.203029",
        "lat":"50.793916",
        "routeIdx":"6",
        "arrTime":"11:42",
        "arrDate":"2018-02-22",
        "depTime":"11:43",
        "depDate":"2018-02-22",
        "track":"6"
        },{
        "name":"Montabaur",
        "id":"8000667",
        "lon":"7.825335",
        "lat":"50.444838",
        "routeIdx":"7",
        "arrTime":"12:02",
        "arrDate":"2018-02-22",
        "depTime":"12:03",
        "depDate":"2018-02-22",
        "track":"1"
        },{
        "name":"Limburg Süd",
        "id":"8003680",
        "lon":"8.096108",
        "lat":"50.382498",
        "routeIdx":"8",
        "arrTime":"12:13",
        "arrDate":"2018-02-22",
        "depTime":"12:14",
        "depDate":"2018-02-22",
        "track":"1"
        },{
        "name":"Frankfurt(M) Flughafen Fernbf",
        "id":"8070003",
        "lon":"8.570181",
        "lat":"50.053169",
        "routeIdx":"9",
        "arrTime":"12:33",
        "arrDate":"2018-02-22",
        "depTime":"12:36",
        "depDate":"2018-02-22",
        "track":"Fern 4"
        },{
        "name":"Frankfurt(Main)Hbf",
        "id":"8000105",
        "lon":"8.663785",
        "lat":"50.107149",
        "routeIdx":"10",
        "arrTime":"12:48",
        "arrDate":"2018-02-22",
        "depTime":"12:54",
        "depDate":"2018-02-22",
        "track":"7"
        },{
        "name":"Aschaffenburg Hbf",
        "id":"8000010",
        "lon":"9.143693",
        "lat":"49.980554",
        "routeIdx":"11",
        "arrTime":"13:22",
        "arrDate":"2018-02-22",
        "depTime":"13:23",
        "depDate":"2018-02-22",
        "track":"6"
        },{
        "name":"Würzburg Hbf",
        "id":"8000260",
        "lon":"9.935777",
        "lat":"49.801795",
        "routeIdx":"12",
        "arrTime":"14:07",
        "arrDate":"2018-02-22",
        "depTime":"14:10",
        "depDate":"2018-02-22",
        "track":"3"
        },{
        "name":"Nürnberg Hbf",
        "id":"8000284",
        "lon":"11.082989",
        "lat":"49.445615",
        "routeIdx":"13",
        "arrTime":"15:02",
        "arrDate":"2018-02-22",
        "depTime":"15:05",
        "depDate":"2018-02-22",
        "track":"9"
        },{
        "name":"München Hbf",
        "id":"8000261",
        "lon":"11.558339",
        "lat":"48.140229",
        "routeIdx":"14",
        "arrTime":"16:07",
        "arrDate":"2018-02-22",
        "track":"22"
        }]
        }
        }

And this is my PHP Code

$url = '....';
$content = file_get_contents($url);
$json = json_decode($content, true);

Now i want to have only the array (the name) behind this one:

    {
    "name":"Düsseldorf Hbf",
    "id":"8000085",
    "lon":"6.794317",
    "lat":"51.219960",
    "routeIdx":"4",
    "arrTime":"11:06",
    "arrDate":"2018-02-22",
    "depTime":"11:08",
    "depDate":"2018-02-22",
    "track":"16"
    },

Sometimes the array with the name "Düsseldorf Hbf" is the first one, sometimes the third... And so on. This is fortuitously.

Has anyone an idea?

Thanks for your help!

Upvotes: 0

Views: 37

Answers (2)

Ermac
Ermac

Reputation: 1240

You could use this solution based on array_filter and current

$url = '....';
$content = file_get_contents($url);
$json = json_decode($content, true);

function hasName($stop) {
    return $stop['name'] == 'Düsseldorf Hbf';
}

$res = current(array_filter($json['JourneyDetail']['Stops']['Stop'], 'hasName'));

var_dump($res);

Or with a straightforward and probably more optimized solution:

$url = '....';
$content = file_get_contents($url);
$json = json_decode($content, true);

$res = getStopByName($json['JourneyDetail']['Stops']['Stop'], 'Düsseldorf Hbf');

var_dump($res);

function getStopByName($stops, $name) {
    foreach ($stops as $stop) {
        if ($stop['name'] == $name) {
            return $stop;
        }
    }
}

Upvotes: 1

user8992812
user8992812

Reputation:

Use brackets when getting certain objects ex. echo $json[3];

TRY THIS:

$content = file_get_contents($url);
$json = json_decode($content, true);
echo $json[3];

Upvotes: 0

Related Questions