0

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が設定されている結果配列のキーですが、そうすることができません。array_keys()が配列内のキーを返すことがわかったように、 registration_Idにアクセスできますが、設定されている配列内のキーを取得するにはどうすればよいですか? 主な問題は、それを行うために foreach ループを使用できないことです。ここで助けが得られることを願っています。$newData->results[0]->registration_id

$newData->results$newData->results[$index]->registration_id

4

3 に答える 3

1
$newData=json_decode($data, true)

2 番目のパラメーターを渡す場合はtrue、json をassosiative array(キー val ペアの配列) に変換します。公式ドキュメント ここに公式ドキュメントがありますJson_decode Php 公式

それを示す例

<?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 に答える
1

オブジェクト モードでのみアイテムをアドレス指定できる理由は、json_decode が呼び出された方法によるものです。

$data を連想配列として返すには、次を使用します。

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

もちろん。まず、オブジェクトではなく配列を実際に操作するように、 の 2 番目のパラメータを使用し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 に答える