How to get json decode array value using PHP - php

I need one help.I need to get the json decode value inside foreach loop using PHP. I am explaining my code below.
$user_qry = "http://oditek.in/takeme/webservice/user2/user_ride_list_v2.php";
$pstflds="mobile=".$mobile;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $user_qry);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $pstflds);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response=curl_exec ($ch);
$data=json_decode($response,true);
$bikeArr=$data->data;
print_r($bikeArr);exit;
Its giving the output like below.
Array ( [0] => stdClass Object ( [book_id] => 161117193881 [booking_status] => 4 [book_date] => 17-11-2016 [book_time] => 07:38 PM ) [1] => stdClass Object ( [book_id] => 161116183564 [booking_status] => 4 [book_date] => 16-11-2016 [book_time] => 06:35 PM ) )
I need to iterate the above array in foreach loop and get the data.Please help me.

json_decode parameter 2 is assoc
When TRUE, returned objects will be converted into associative arrays.
default is false
reference http://php.net/manual/en/function.json-decode.php
json_decode($response, true);

try
$data=json_decode($response,true);
and youll get assoc array instead of object

Can you try this and see if you get any errors?
foreach($bokeArr as $bike){
echo 'book id = ' . $bike->book_id;
}

Related

convert std object array to simple php array

my code so far
<?php
foreach($sub_category as $row2){
$url = 'https://myurl.com';
$ch = curl_init();
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 3);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$data = curl_exec($ch);
curl_close($ch);
echo $name." data = "."<pre>"; print_r($data);
}
?>
This is $data output
Array
(
[0] => stdClass Object
(
[course_title] => 60+ Space Facts To Get An A In Astronomy
[description] => 60+ Space Facts To Get An "A" In Astronomy
[image] => pexels-pixabay-39896_20210220014840929292735.jpg
)
[1] => stdClass Object
(
[course_title] => Learn Chinese
[description] => Learn Chinese
[image] => Chinoabc_20211227114307692406780.png
)
)
I want to convert it to look like below
Array
(
[0] => array
(
[course_title] => 60+ Space Facts To Get An A In Astronomy
[description] => 60+ Space Facts To Get An "A" In Astronomy
[image] => pexels-pixabay-39896_20210220014840929292735.jpg
)
[1] => array
(
[course_title] => Learn Chinese
[description] => Learn Chinese
[image] => Chinoabc_20211227114307692406780.png
)
)
i have tried many answers from here
converting array of objects to simple array
but it's not working for me
i have tried many answers from already posted questions. my problem is different than any other relevant question posted here
You can use the (array) type cast to convert an object to an equivalent associative array.
$data = array_map(function($x) { return (array)$x; }, $data);
If the original array of objects came from using json_decode(), you can tell it to return associative arrays instead of objects by giving it a true second argument.
$data = json_decode($data, true);

getting values from stdClass Object

I try to get values of stdClass Object into php variables. And i looked for other solutions but i couldn't success. Here is my result.
stdClass Object
(
[messages] => Array
(
[0] => stdClass Object
(
[apiMessageId] => db55468cdb274551b9e18c973ec780f4
[accepted] => 1
[to] => 1111111
[error] =>
)
)
[error] =>
)
I want to get only "apiMessageId" section but as i said i couldn't get this. I tried "$object->messages[0]->apiMessageId;" but no results on the screen. Anyone to help me please?
and this is my php code for request.
function Conn($url){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]);
$cikti = curl_exec($curl);
curl_close($curl);
return str_replace(array("\n","\t","\r"), null, $cikti);
}
$url1 = "https://platform.clickatell.com/messages/http/send?apiKey=xxx&to=xxx&content=Test+message+text";
$Conn = Conn($url1);
$res = json_decode($Conn);
echo "<pre>";
print_r($res);
echo "</pre>";
I found the solution. This is the query what i need.
echo $res->messages[0]->apiMessageId;
I wrote before
echo $object->messages[0]->apiMessageId;
but my variable name is not object. The variable name is $res.

json_decode: can't get foreach to work

I'm losing my sight on this.. I can't find a solution and I keep ranting :P
I'm using the Movie Database to get a JSON with some info about a movie. Here's my code:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.themoviedb.org/3/movie/tt1327773/images?api_key=MY_API_KEY");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Accept: application/json"
));
$response = curl_exec($ch);
curl_close($ch);
$posters = json_decode($response, true);
foreach ($posters as $poster) {
$locandina = $poster[0]->posters->file_path;
echo $locandina;
}
?>
Of course print_r($response); works and it prints the array. What doesn't work is the foreach.. I can't get the file_path values. I keep getting Trying to get property of non-object even though I added a , true in the json_decode arguments! Here's the array:
[id] => 132363
[backdrops] => Array (
[0] => stdClass Object (
[aspect_ratio] => 1.78
[file_path] => /zZggWJSG18wPIOrZOgV5LI12LMi.jpg
[height] => 1080
[iso_639_1] =>
[vote_average] => 5.3846153846154
[vote_count] => 2
[width] => 1920
)
[1] => stdClass Object (
[aspect_ratio] => 1.78
[file_path] => /wYuFRYTfx5rVjyhqdf8MXdQzKAo.jpg
[height] => 1080
[iso_639_1] =>
[vote_average] => 5.3479853479854
[vote_count] => 2
[width] => 1920
)
...
)
to have access to file_path you need this array access key: $array["backdrops"][0]["file_path"] -> because it is contained in the first position of an non-associative array as the value of "backdrops"... check it out (;
source code:
// this is your input data
$json = '{"id":132363,"backdrops":[{"aspect_ratio":1.78,"file_path":"/zZggWJSG18wPIOrZOgV5LI12LMi.jpg","height":1080,"iso_639_1":null,"vote_average":5.38461538461539,"vote_count":2,"width":1920},{"aspect_ratio":1.78,"file_path":"/wYuFRYTfx5rVjyhqdf8MXdQzKAo.jpg","height":1080,"iso_639_1":null,"vote_average":5.34798534798535,"vote_count":2,"width":1920},{"aspect_ratio":1.78,"file_path":"/txiDfzC43eynxEchHfuZ1xTGfET.jpg","height":1080,"iso_639_1":null,"vote_average":5.34065934065934,"vote_count":2,"width":1920},{"aspect_ratio":1.78,"file_path":"/56jBImSOTXDk77tJ15eDscmM1BO.jpg","height":720,"iso_639_1":null,"vote_average":5.33910533910534,"vote_count":3,"width":1280},{"aspect_ratio":1.78,"file_path":"/b2Ki6hHtAXPIx84mGWM5hkaUXYC.jpg","height":720,"iso_639_1":null,"vote_average":5.2967032967033,"vote_count":2,"width":1280},{"aspect_ratio":1.78,"file_path":"/v765i6Y5oHXKRtQmiTasbs59G6g.jpg","height":720,"iso_639_1":null,"vote_average":5.2967032967033,"vote_count":2,"width":1280},{"aspect_ratio":1.78,"file_path":"/9utSv4T39V70iM1tGPb16HItFZ2.jpg","height":1080,"iso_639_1":null,"vote_average":5.2967032967033,"vote_count":2,"width":1920},{"aspect_ratio":1.78,"file_path":"/fnjBO2DKXOwHVMz4Tpjlf0DAm2F.jpg","height":1080,"iso_639_1":null,"vote_average":5.27472527472527,"vote_count":2,"width":1920},{"aspect_ratio":1.78,"file_path":"/4Ns5u0zZvOvD6FmXCLMsokBF8tO.jpg","height":2160,"iso_639_1":null,"vote_average":5.26041666666667,"vote_count":1,"width":3840},{"aspect_ratio":1.78,"file_path":"/5ioO0UWgnSFO1ESTlci4tvtfO0w.jpg","height":2160,"iso_639_1":null,"vote_average":5.24553571428571,"vote_count":1,"width":3840},{"aspect_ratio":1.78,"file_path":"/6pEA2GiB4rxLLQqoqLKTmJ2bkmk.jpg","height":1080,"iso_639_1":null,"vote_average":5.24542124542125,"vote_count":2,"width":1920},{"aspect_ratio":1.78,"file_path":"/2OJ8l1qsk7KvVO4xdtQ7kDsoInE.jpg","height":2160,"iso_639_1":null,"vote_average":5.23809523809524,"vote_count":1,"width":3840},{"aspect_ratio":1.78,"file_path":"/fFsZzecwN2yTBOPqyQnpQS3lrEh.jpg","height":720,"iso_639_1":null,"vote_average":5.23088023088023,"vote_count":3,"width":1280}],"posters":[{"aspect_ratio":0.67,"file_path":"/a2dAFXwnrRu1kJ95Tp7fI0axyYv.jpg","height":2100,"id":"52d6fdf619c2952d2c048af0","iso_639_1":"de","vote_average":5.41847041847042,"vote_count":3,"width":1400},{"aspect_ratio":0.67,"file_path":"/hUjEYTN5NuK8kYRQxngS7itpBQC.jpg","height":2100,"id":"52b9a79e760ee302e50e0957","iso_639_1":"en","vote_average":5.38992408557626,"vote_count":6,"width":1400},{"aspect_ratio":0.71,"file_path":"/3WuXELbV6MKqqDuOSVcJFFCqiTn.jpg","height":2161,"id":"531fb9259251411f8500067e","iso_639_1":"cs","vote_average":5.3125,"vote_count":1,"width":1529},{"aspect_ratio":0.7,"file_path":"/gkq46U0Cd8zZVfXHsrpCe81xsSH.jpg","height":1500,"id":"53b1277d0e0a26598900797d","iso_639_1":"it","vote_average":5.3125,"vote_count":1,"width":1050},{"aspect_ratio":0.67,"file_path":"/jcyTM8XGonYaKdnvXDZ1hFyzQt6.jpg","height":1024,"id":"51c061f4760ee306480c6370","iso_639_1":"en","vote_average":5.28138528138528,"vote_count":3,"width":690},{"aspect_ratio":0.67,"file_path":"/qx7VAo0aJwH6t17YgGvHe9eP61m.jpg","height":2100,"id":"52be5e01760ee359630bcba1","iso_639_1":"pt","vote_average":5.27529761904762,"vote_count":1,"width":1400},{"aspect_ratio":0.75,"file_path":"/43qeAVpny8rVFW0hprgIFOByO3E.jpg","height":2060,"id":"5231f2ed19c2950c0d03d534","iso_639_1":"fr","vote_average":5.27417027417027,"vote_count":3,"width":1545},{"aspect_ratio":0.7,"file_path":"/b91OJaB9llSUZXc7C8Rtr56e3ws.jpg","height":1139,"id":"530da421c3a3685bf4002347","iso_639_1":"da","vote_average":5.26785714285714,"vote_count":1,"width":800},{"aspect_ratio":0.67,"file_path":"/gBLjprwQ4Re83qF3s5wR17pmQuI.jpg","height":1202,"id":"520b7e0119c2955c22062095","iso_639_1":"en","vote_average":5.26418786692759,"vote_count":10,"width":811},{"aspect_ratio":0.7,"file_path":"/jIFNhNpoZQja02uVudJr4dRzat9.jpg","height":2806,"id":"52b54ad9760ee34c2d0ced9a","iso_639_1":"ro","vote_average":5.26041666666667,"vote_count":1,"width":1956},{"aspect_ratio":0.75,"file_path":"/fR5D7pvKlvdkYf5pjg5v62QA9VY.jpg","height":3778,"id":"52315424760ee370e8179f24","iso_639_1":"fr","vote_average":5.24542124542125,"vote_count":2,"width":2833},{"aspect_ratio":0.71,"file_path":"/zU0FQydIMqusfC7dRD1gJojG07v.jpg","height":1980,"id":"52f23c4ec3a3687dfe0838ed","iso_639_1":"de","vote_average":5.24542124542125,"vote_count":2,"width":1400},{"aspect_ratio":0.67,"file_path":"/ahK6dhq7yVx1O6P8rVnSApurwOR.jpg","height":1200,"id":"52daccf3760ee36893077851","iso_639_1":"it","vote_average":5.17113095238095,"vote_count":1,"width":800},{"aspect_ratio":0.67,"file_path":"/xPwpuwNQVDh7PCQoyct0Fh4kdYn.jpg","height":2100,"id":"52555c11760ee31fbe0727d5","iso_639_1":"en","vote_average":5.14157014157014,"vote_count":11,"width":1400},{"aspect_ratio":0.67,"file_path":"/wLJpmGFzfn5YDCn3ZTO7WgZRpr4.jpg","height":1897,"id":"51ad01df19c295440007504c","iso_639_1":"en","vote_average":5.13227513227513,"vote_count":9,"width":1280},{"aspect_ratio":0.67,"file_path":"/nEx0vsj0WbXuuej0YJYXZaLtIwU.jpg","height":2100,"id":"52b9a79f760ee319b820b08b","iso_639_1":"en","vote_average":5.11204481792717,"vote_count":5,"width":1400},{"aspect_ratio":0.67,"file_path":"/5Iia0rSQXLPSz4Dnksn6OTgTFGX.jpg","height":1500,"id":"535b80d2c3a36830b00010f5","iso_639_1":"hu","vote_average":0.0,"vote_count":0,"width":1000},{"aspect_ratio":0.69,"file_path":"/mMlG2cFr3za21lKkbu2XpitwtGT.jpg","height":800,"id":"52b4058d760ee3576d02b06c","iso_639_1":"el","vote_average":0.0,"vote_count":0,"width":554},{"aspect_ratio":0.69,"file_path":"/cHux0aJqxxvMT6MgVnMaLMXxnwz.jpg","height":2882,"id":"52bdff9019c2955ab21272f5","iso_639_1":"pl","vote_average":0.0,"vote_count":0,"width":2000},{"aspect_ratio":0.68,"file_path":"/p14JxT0fzvbeOv9fCAI67x0wuQ5.jpg","height":1469,"id":"52be5e01760ee37070015c47","iso_639_1":"pt","vote_average":0.0,"vote_count":0,"width":1000},{"aspect_ratio":0.7,"file_path":"/heF6qrZDSrTbfFs0mRlj9imJJKN.jpg","height":1428,"id":"52f103f919c295253e05d5a2","iso_639_1":"es","vote_average":0.0,"vote_count":0,"width":1000},{"aspect_ratio":0.69,"file_path":"/rcA5RpSJI2cHSgnppvI3locslbY.jpg","height":2048,"id":"53a13c29c3a3687bbc001b22","iso_639_1":"tr","vote_average":0.0,"vote_count":0,"width":1421},{"aspect_ratio":0.7,"file_path":"/iB101OMznrVlyGq84f4jwg49VVF.jpg","height":966,"id":"53be4b3ac3a3687e59002922","iso_639_1":"ko","vote_average":0.0,"vote_count":0,"width":678}]}';
// convert it to an array enabling the second parameter (associative array)
$array = json_decode($json, true);
// this is the whole array
var_dump($array);
// this is the key you need to get
var_dump($array["backdrops"][0]["file_path"]);
// which is similar to (the internal pointer points to the first element):
$sub_array = current($array["backdrops"]);
var_dump($sub_array["file_path"]);

How to get data from an array inside json data php

I have the following array of json data. When I try to loop using a for each, php gives me the error "Object of class stdClass could not be converted to string". I want to access the nameserver in the authns array, and the soa array. How do I go about doing that?
stdClass Object (
[error] =>
[domain] => whoisdoma.net
[ip_address] => 108.162.199.120
[authns] => stdClass Object (
[nameserver] => uma.ns.cloudflare.com
[ip] => 173.245.58.146
[location] => San Francisco
)
[soa] => stdClass Object (
[nameserver] => tom.ns.cloudflare.com
[email] => dns.cloudflare.com
[serial] => 2015505396
[refresh] => 10000
[retry] => 2400
[expiry] => 604800
[minimum] => 3600
)
)
This is the code I'm using to get the data:
<?php
$domain = $_GET['domain'];
//set the url
$url = "http://api.site.ga/v1/dns/lookup?domain=".$domain;
//start a curl session
$ch = curl_init();
$timeout = 5;
//set curl options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
//get the data
$data = curl_exec($ch);
//decode the data
$jsonData = json_decode($data);
//close the curl session
curl_close($ch);
?>
This is the for each loop I'm using
<?php
foreach($jsonData->authns as $authns)
{
echo $authns->nameserver;
}
?>
You need to decode the json object using an associative array.
Here is an exmaple:
$data = json_decode(file_get_contents('http://api.domain.com/call'), true);
$data is now an associative array.
You are looping through authns while it is an object by itself. So your nameserver which you want is actually $authns in its first iteration.
Just access it like $jsonData->authns->nameserver
try this for yourself
foreach($jsonData->authns as $authns)
{
echo $authns;
}

Post multidimensional array using CURL and get the result on server

I am sending data from my local machine to server using CURL. And the data is multidimensional array.
Array
(
[0] => stdClass Object
(
[id] => 1
)
[1] => stdClass Object
(
[id] => 0
)
[2] => stdClass Object
(
[id] => 11
)
)
I am using this below code for sending the data.
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, "my_url");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $array); // $array is my above data
But at server when I try to put this incoming data to file or just print_r it gives me this below output
Array
(
[0] => Array
[1] => Array
[2] => Array
)
But I want the output in multidimensional.
I tried with print_r($_POST[0]) but it gives only Array text.
cURL can only accept a simple key-value paired array where the values are strings, it can't take an array like yours which is an array of objects. However it does accept a ready made string of POST data, so you can build the string yourself and pass that instead:
$str = http_build_query($array);
...
curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
A print_r($_POST) on the receiving end will show:
Array
(
[0] => Array
(
[id] => 1
)
[1] => Array
(
[id] => 0
)
[2] => Array
(
[id] => 11
)
)
I would give a go to serialize and unserialize:
1) Before sending your array, serialize it (and set your transfer mode to binary):
(...)
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE); // need this to post serialized data
curl_setopt($ch, CURLOPT_POSTFIELDS, serialize($array)); // $array is my above data
2) When you receive the data, unserialize it:
$array = unserialize($_POST);
More details here and here
$param['sub_array'] = json_encode($sub_array);
and on the other side
$sub_array= json_decode($_POST['sub_array']);

Categories