0

我第一次使用GCM(谷歌可以消息),但遇到了一些问题。虽然问题与 GCM 无关。我有一个 JSON 数据

$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);

现在我想要的是结果数组中设置了registration_id但我无法这样做的键。我可以访问registration_Id,就像$newData->results[0]->registration_id

我发现array_keys()返回数组中的键一样,但是我怎样才能获取设置的$newData->results数组中的键$newData->results[$index]->registration_id?主要问题是我不能使用 foreach 循环来做这件事。希望我能在这里得到一些帮助。

4

3 回答 3

1

当然。首先,使用第二个参数,json_decode这样您实际上是在使用数组而不是对象。然后使用您想要的项目(在哪里设置)过滤数组并获取键registration_id

$newData=json_decode($data, true);

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

print_r(array_keys($filteredResults));

工作示例:http: //3v4l.org/e8doL

请注意,此代码假定您使用的是 PHP 5.3 或更高版本。如果您使用的是早期版本,则需要先定义array_filter回调函数并将其传入,而不是使用匿名函数。

于 2014-01-13T13:27:55.010 回答
1

您只能在对象模式下处理项目的原因是由于调用 json_decode 的方式。

要将 $data 作为关联数组返回,请使用:

$newData=json_decode($data, true)
于 2014-01-13T13:30:51.113 回答
1
$newData=json_decode($data, true)

如果您传递第二个参数true,那么它将 json 转换为assosiative array(带有键 val 对的数组)。官方文档 这里是官方文档Json_decode Php Official

一个例子来证明

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

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

?>

它的输出将是

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)
}
于 2014-01-13T13:35:33.883 回答