bockzior
bockzior

Reputation: 199

PHP: How to get a value from a JSON file?

I'm using PHP and json_decode to use a remote API and I'm having what seems to be a newbie problem for which I didn't even know what to search to find my answer.

So on my script I have a $code = 392 and a json file which simplified version is:

{
    "result": {
        "items": [
            {
                "name": "New York",
                "code": 7294,
            },
            {
                "name": "Miami",
                "code": 392,
            },
            {
                "name": "Los Angeles",
                "code": 9182,
            }
        ]
    }
}

So, simply put, having the code 392 I want to know which name corresponds to that code. How ? (The actual json result has thousands of "items", if that makes a difference)

Upvotes: 1

Views: 307

Answers (4)

Tun Zarni Kyaw
Tun Zarni Kyaw

Reputation: 2119

You can convert JSON to PHP object and loop through the items with foreach loop.

function getNameByCode($phpobj, $code){
    if( isset($phpobj->result) ){
        if( isset($phpobj->result->items) 
            && is_array($phpobj->result->items) ){
            foreach($phpobj->result->items as $item){
                if( $item->code == $code ){
                    return $item->name;
                }
            }
        }
    }
    return false;
}//end function

You can test with this ... NOTE: trailing commas are removed as suggest by rjdown in comment

$json = '{
"result":     {
    "items": [
                {
                    "name": "New York",
                    "code": 7294
                },
                {
                    "name": "Miami",
                    "code": 392
                },
                {
                    "name": "Los Angeles",
                    "code": 9182
                }
            ]
            }
        }';
$phpobj = json_decode($json); 

$name = getNameByCode($phpobj, "7294");
echo $name;

Upvotes: 0

Santino_Wu
Santino_Wu

Reputation: 53

At first you should decode your json data like:

// will decode json data as assoc array
$data = json_decode($json_data, true);

Then, you can get value in this array like:

$item01 = $data['result']['items'][0];
$name   = $item01['name']; // New York
$code   = $item01['code']; // 7294

Or

// will decode json data as object
$data = json_decode($json_data);

$item01 = $data->result->items[0];
$name   = $item01->name; // New York
$code   = $item01->code; // 7294

Upvotes: 1

Michael Benjamin
Michael Benjamin

Reputation: 2915

foreach( json_decode($my_json_string) as $key => $item)
      if ( $item['code'] === $code ) { $name = $item[name]; break; }

Upvotes: 0

Austin Brunkhorst
Austin Brunkhorst

Reputation: 21130

You can iterate through items in result of your JSON object, and check for equality with the desired code, and each item's code. Here's how you would implement it into a function.

function getNameFromCode($json, $code) {
    foreach ($json['result']['items'] as $item)
        if ($item['code'] == $code)
           return $item['name'];

    // return false if the code wasn't found.
    return false;
}

// assume this is the JSON string of your example.
$json_string = "...";

// pass true as the second argument to get an associative array.
$json = json_decode($json_string, true);

// should return "Los Angeles".
$name = getNameFromCode($json, 9182);

Documenation on foreach().

Upvotes: 0

Related Questions