How do i retrieve api data using foreach loop in php - php

This is my data and i want to print the value using decode Json data into array value so please help me out.
{
"total_results": 10000,
"page": 1,
"per_page": 15,
"photos": [
{
"id": 1687093,
"width": 3079,
"height": 4619,
"url": "https://fingerprintdesigns.studio/",
"photographer": "Cameron Casey",
"photographer_id": 455136,
"src": {
"original": "https://fingerprintdesigns.studio/",
},
"liked": false
} ] }
I want to retrieve total_results and photos->src->original so how can i do?

First you'll need to use json_decode to converts it into a PHP object:
$response = json_decode($url);
To retrieve total_results:
echo $response->total_results;
You'll have to loop through photos attribute since it's an array of objects:
foreach ($response->photos as $photo) {
echo $photo->src->original;
}

If you have only one object of photos then you can do as below
$obj = '{
"total_results": 10000,
"page": 1,
"per_page": 15,
"photos": [
{
"id": 1687093,
"width": 3079,
"height": 4619,
"url": "https://fingerprintdesigns.studio/",
"photographer": "Cameron Casey",
"photographer_id": 455136,
"src": {
"original": "https://fingerprintdesigns.studio/"
},
"liked": false
} ] }';
// Convert JSON string to Array
$objectArray = json_decode( $obj, true );
print_r($objectArray); // Dump all data of the Array
echo $total_results = $objectArray['total_results']; // Access Array data
echo $originalPhoto = $objectArray['photos'][0]['src']['original'];
// For multiple value
if( is_array( $objectArray['photos'] ) && !empty( $objectArray['photos'] ) ){
foreach ($objectArray['photos'] as $photo) {
echo $photo['src']['original'];
}
}

Related

json, php - output string from array

I am trying to decode JSON data to PHP then output it to the site. If I have the following:
{
"name": "josh",
"type": "human"
{
I can do this (within PHP), to display or output my type:
$file = "path";
$json = json_decode($file);
echo $json["type"]; //human
So, if I have the following:
{
"name": "josh",
"type": "human",
"friends": [
{
"name": "ben",
"type": "robot"
},
{
"name": "tom",
"type": "alien"
}
],
"img": "img/path"
}
How can I output what type my friend ben is?
Use a loop like foreach and do something like the following:
//specify the name of the friend like this:
$name = "ben";
$friends = $json["friends"];
//loop through the array of friends;
foreach($friends as $friend) {
if ($friend["name"] == $name) echo $friend["type"];
}
To get the decoded data in array format you would supply true as the second argument to json_decode otherwise it will use the default which is object notation. You could easily create a function to shorten the process when you need to find a specific user
$data='{
"name": "josh",
"type": "human",
"friends": [
{
"name": "ben",
"type": "robot"
},
{
"name": "tom",
"type": "alien"
}
],
"img": "img/path"
}';
$json=json_decode($data);
$friends=$json->friends;
foreach( $friends as $friend ){
if( $friend->name=='ben' )echo $friend->type;
}
function finduser($obj,$name){
foreach( $obj as $friend ){
if( $friend->name==$name )return $friend->type;
}
}
echo 'Tom is a '.finduser($friends,'tom');
try this,
$friend_name = "ben";
$json=json_decode($data);
$friends=$json->friends;
foreach( $friends as $val){
if($friend_name == $val->name)
{
echo "name = ".$val->name;
echo "type = ".$val->type;
}
}
DEMO

Getting JSON data from website returns " string(0) "

I;m trying to get data from a website using the following code:
<?php
$url = 'http://services.runescape.com/m=itemdb_oldschool/api/catalogue/detail.json?item=4798';
$content = file_get_contents($url);
var_dump($content);
$json = json_decode($content, true);
var_dump($json);
for ($idx = 0; $idx < count($json); $idx++) {
$obj = (Array)$json[$idx];
echo 'result' . $obj["name"];
}
?>
Which is getting me this result:
string(0) "" NULL
<?php
$url = 'http://services.runescape.com/m=itemdb_oldschool/api/catalogue/detail.json?item=4798';
$content = file_get_contents($url);
echo "<pre>";
//print_r($content);
$data = json_decode($content);
print_r($data); //Show the json decoded data comes form $url
##Parse this array {$data} using foreach loop as your use
?>
There are no numeric keys in the json returned from the url you posted in your question. So iterating through the associative array with numeric keys returns nothing.
This is the structure of the json you are working with:
{
"item": {
"icon": "http://services.runescape.com/m=itemdb_oldschool/5122_obj_sprite.gif?id=4798",
"icon_large": "http://services.runescape.com/m=itemdb_oldschool/5122_obj_big.gif?id=4798",
"id": 4798,
"type": "Default",
"typeIcon": "http://www.runescape.com/img/categories/Default",
"name": "Adamant brutal",
"description": "Blunt adamantite arrow... ouch.",
"current": {
"trend": "neutral",
"price": 529
},
"today": {
"trend": "neutral",
"price": 0
},
"members": "true",
"day30": {
"trend": "negative",
"change": "-9.0%"
},
"day90": {
"trend": "negative",
"change": "-20.0%"
},
"day180": {
"trend": "negative",
"change": "-31.0%"
}
}
}
Try accessing $json["item"]. That should give you something more meaningful to work with. If you want to iterate over the key/value pairs in the item, use a foreach loop:
foreach($json["item"] as $key => $value) {
echo $key . ":";
print_r($value);
}

PHP Create Multidimension Array for JSON output

I feel terrible even asking because I have been TRYING to understand and comprehend other peoples examples this is what i'm TRYING to accomplish
{
"field": [
{
"appid": 0,
"page": 0,
"fieldname": "Sweet",
"value": "Tammy Howell"
},
{
"appid": 1,
"page": 1,
"fieldname": "Cecilia",
"value": "Shana Jordan"
},
{
"appid": 2,
"page": 2,
"fieldname": "Merritt",
"value": "Copeland Pena"
}
]
}
I need to be able to make the above JSON output happen when doing an SQL SELECT statement
Here is my currentCode
$x = 0;
$userFieldsResult = mysqli_query($database_id, "SELECT * FROM theDB.DynamicFields ORDER BY Page, Priority") or die (mysqli_error($database_id));
if (mysqli_num_rows($userFieldsResult)<=0)
{
echo "nothing found";
exit;
} else
{
while($row = mysqli_fetch_array($userFieldsResult))
{
$userFields[$x]['appid'] = $row['appid'];
$userFields[$x]['page'] = $row['page'];
$userFields[$x]['fieldname'] = $row['fieldname'];
$userFields[$x]['value'] = $row['value'];
$x++;
}
echo json_encode($userFields);
exit;
}
echo json_encode($userFields);
This is normally how i just been outputting json so they each are just part of 1 array looping, but I am trying to understand how to create more "in-depth" JSON arrays so they have a specific identifier before they list out the information.
[
{
"appid": 0,
"page": 0,
"fieldname": "Sweet",
"value": "Tammy Howell"
},
{
"appid": 1,
"page": 1,
"fieldname": "Cecilia",
"value": "Shana Jordan"
},
{
"appid": 2,
"page": 2,
"fieldname": "Merritt",
"value": "Copeland Pena"
}
]
In my example I just want to be able to have "field" be the "upper" part of the array that holds all the information as i showed in the example above.
You need to add field as parent array to your array.
Change from
echo json_encode($userFields);
Into
$json = array('fields' => $userFields);
echo json_encode($json);
In this particular configuration, you are being returned an object with properties, of which, the property's value may be an array.
So what you should actually be doing is creating a stdClass object in PHP and assigning it a property of "field" which is an empty array. Then you can push into this array stack.
$obj = new stdClass();
$obj->fields = array();
while(....){
$obj->fields[$x]['appid'] =
$obj->fields[$x]['appid'] = $row['appid'];
$obj->fields[$x]['page'] = $row['page'];
$obj->fields[$x]['fieldname'] = $row['fieldname'];
$obj->fields[$x]['value'] = $row['value'];
}
Now you can json encode the object and return it.
echo json_encode($obj);

Access PHP data from Array within an Array

Newbie PHP question here:
I am using the Vimeo API to access video information and am using PHP to receive the initial array of data. I know how to access the data by using calls like:
echo $array['body']['description'];
But I need to access data like this where 'download' would be accessed via
echo $array['body']['download'];
Specifically where the quality is stated as source as I don't need the other ones. From it I need the link.
"download": [
{
"quality": "mobile",
"type": "video/mp4",
"width": 480,
"height": 270,
"expires": "2015-01-07T18:51:48+00:00",
"link": "LINK",
"created_time": "2015-01-02T18:47:11+00:00"
},
{
"quality": "source",
"type": "source",
"width": 1920,
"height": 1080,
"expires": "2015-01-07T18:51:48+00:00",
"link": "LINK",
"created_time": "2015-01-02T18:25:19+00:00"
}
]
Thank you all for your help!
You can loop through the array $array['body']['download'] then check the value of quality. If it equals source then get the link.
foreach( $array['body']['download'] as $innerArray ){
if( $innerArray['quality'] === 'source' ){
echo $innerArray['link'];
}
}
If you want to filter an array by properties within the array, you can use array_filter with your own filter callable. In your case, try:
$downloads = array_filter($array['body']['download'], function($download) {
return $download['quality'] === 'source';
});
Some like
$arr = $array['body']['download'];
$link = '';
for($i = 0; $i <count($arr); $i ++ ){
if(#$arr[$i]['quality'] == 'source') {
$link = #arr[$i]['link'];
break;
}
}
echo $link;

Json php formatted data

I have a json file like this
{
"id": "123456789012345",
"members": {
"data": [
{
"name": "Dylan John",
"administrator": false,
"id": "12341234"
},
{
"name": "Test user",
"administrator": false,
"id": "43214321"
},
{
"name": "Demo user",
"administrator": false,
"id": "55445544"
},
{
"name": "Fake user",
"administrator": false,
"id": "11991199"
}
],
"paging": {
"next": "www.123456demo12345.com"
}
}
}
I need to extract the id of each name.
I just start my php code like that but simply display only the master id:
<?php
$url = "http://www.1234demo1234fake.com/user.json";
$json = file_get_contents($url);
$data = json_decode($json, TRUE);
echo $data[id]; //echo master id
echo $data[members][data][id];
?>
You have to iterate over $data['members']['data'] and print $data['members']['data'][$i]['id'].
Your JSON object contains property members again members has property data.
Now data is an array.
Just loop over data, you get array of objects (members), fetch property id from it.
<?php
$abc = json_decode($your_json_sting);
$membersData = $abc->members->data;
$memberIds = array();
foreach ($membersData as $mem) {
$memberIds[] = $mem->id;
}
echo '<pre>';print_r($memberIds);echo '</pre>';
?>

Categories