我第一次使用 GCM(Google可以发送短信),我遇到了一些问题。虽然问题与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 的结果数组中的键,但我无法这样做。
我可以像$newData->results[0]->registration_id
一样访问 registration_Id
我发现 array_keys()返回数组中的键但是如何获取$newData->results
数组中$newData->results[$index]->registration_id
的键的键设定?
主要问题是我无法使用foreach循环来执行此操作。希望我能在这里得到一些帮助。
答案 0 :(得分:1)
不确定。首先,使用json_decode
的第二个参数,这样你实际上是在处理一个数组,而不是一个对象。然后filter the array包含您想要的项目(设置registration_id
的位置)和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));
请注意,此代码假定您使用的是PHP 5.3或更高版本。如果您使用的是早期版本,则需要首先定义array_filter
回调函数并将其传递而不是使用匿名函数。
答案 1 :(得分:1)
您只能在对象模式下处理项目的原因是由于调用json_decode的方式。
要将$ data作为关联数组返回,请使用:
$newData=json_decode($data, true)
答案 2 :(得分:1)
$newData=json_decode($data, true)
如果您传递第二个参数true
,则它会将json转换为assosiative array
(具有键值对的数组)。Official doc
这是官方文档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)
}