Вопрос

I am using GCM(Google could messaging) for the very first time and i am stuck with some problem. Although the problem has nothing to do with the GCM.I have a JSON data

$data='{"multicast_id":7917175795873320166,"success":6,"failure":0,"canonical_ids":4,

"results":[

{"registration_id":"3","message_id":"m1"},
{"message_id":"m1"},
{"message_id":"m1"},
{"registration_id":"3","message_id":"m1"},

{"registration_id":"3","message_id":"m1"},

{"registration_id":"3","message_id":"m1"}]}';

$newData=json_decode($data);

Now what i want is the keys in the result array for which registration_id is set but i am unable to do so. I can access the registration_Id like $newData->results[0]->registration_id

I have found that array_keys() returns the keys in an array but how can i get the keys in the $newData->results array for which $newData->results[$index]->registration_id is set? The major issue is that i cant use the foreach loop for doing it. Hope i will get some help here.

Это было полезно?

Решение

Sure. First off, use the second param of json_decode so you're actually working with an array and not an object. Then filter the array with the items you want (where registration_id is set) and get the keys.

$newData=json_decode($data, true);

$filteredResults = array_filter($newData['results'], function($item) {
    return isset($item['registration_id']);
});

print_r(array_keys($filteredResults));

Working example: http://3v4l.org/e8doL

Note this code assumes you are using PHP 5.3 or later. If you are on an earlier version, you'll need to define your array_filter callback function first and pass it in rather than using an anonymous function.

Другие советы

The reason that you can only address the items in object mode, is due to the way the json_decode was called.

To return $data as an associative array, use:

$newData=json_decode($data, true)
$newData=json_decode($data, true)

if you're passing the second param true then it converts the json to assosiative array(an array with key val pair).Official doc Here is official documentation Json_decode Php Official

an example to show that

<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));
var_dump(json_decode($json, true));

?>

its output will be

object(stdClass)#1 (5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

array(5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top