5

JavaのMapMessageをActiveMQに送信し、PHPのStompを使用して取得しています。私のメッセージ作成コードは次のようになります。

MapMessage message = session.createMapMessage();
message.setInt("id", 42);
message.setInt("status", 42);
message.setString("result", "aString");

PHPでそれらを取得すると、作成される配列は次のようになります。

Array (
[map] => Array (
        [0] => Array (
                [entry] => Array (
                        [0] => Array (
                                [string] => id
                                [int] => 42
                            )

                        [1] => Array (
                                [string] => status
                                [int] => 42
                            )

                        [2] => Array (
                                [string] => Array (
                                        [0] => result
                                        [1] => aString
                                    )
                            )
                    )
            )
    )
)

私はそれで何をすべきですか?Stompに合理的な方法でシリアル化を解除するように説得する方法はありますか、それともPHPの呪文によって、この配列へのアクセスの負担が軽減されますか?特に、2つの文字列ではなく文字列と整数がある場合、配列は完全に異なって見えるため、エントリを繰り返し処理して連想配列を作成することはできません。

4

1 に答える 1

1

これが私が思いついたものです。よりクリーンなソリューションを知っている人はいますか?

$entries = $msg->map['map'][0]['entry'];
$map = array();
foreach($entries as $entry) {
    $vals = array_values($entry);
    if(count($vals) == 1 && is_array($vals[0])) {
        $vals = $vals[0];
    }
    $map[$vals[0]] = $vals[1];
}

これは私に与えます:

array
  'id' => int 42
  'status' => int 42
  'result' => string 'aString' (length=7)

これは私が探しているものとほぼ同じですが、そこに到達するためのコードはかなり壊れやすいようです。

于 2010-06-09T07:05:39.873 に答える