I have found a solution, however, I am looking for a better one. Here is a situation:
I am sending a request with the following code.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($message));
$result = curl_exec($ch); # Here I am receiving a response.
if ($result === FALSE) {
die('Curl failed: ' . curl_error($ch));
}
curl_close($ch);
Now, the $result
is the response that I have received and I want to read it. It is in JSON format. Looks like this:
{
"multicast_id": 1234567890,
"success": 0,
"failure": 10,
"canonical_ids": 0,
"results": [
{
"error": "InvalidRegistration"
},
{
"error": "InvalidRegistration"
},
{
"error": "InvalidRegistration"
},
{
"error": "InvalidRegistration"
},
{
"error": "InvalidRegistration"
},
{
"error": "InvalidRegistration"
},
{
"error": "InvalidRegistration"
},
{
"error": "InvalidRegistration"
},
{
"error": "InvalidRegistration"
},
{
"error": "InvalidRegistration"
}
]
}
At first I tried parsing it using json_decode($result)
but that got me an error, so I tried to parse it as array of elements with json_decode($result, true)
which worked just fine.
Now, I don't need any other information besides results[]
array with all the errors in that particular order.
So I was able to get it with the following code:
$responses = array();
$decoded = json_decode($result, true);
foreach ($decoded as &$item) {
# During first iteration, in order to find array of "results" I have to perform this check
if (is_array($item)) {
foreach ($item as &$in_item) {
foreach ($in_item as &$in_in_item) {
$responses[] = $in_in_item;
}
}
}
}
With this kind of iteration through multiple arrays I was able to get all the "InvalidRegistration"
messages and then use them for my needs.
This solution works of course, however, I was wondering if there a better, more concise way of achieving same result.