3

これらのオブジェクトで配列を取得する際に問題が発生しています。print_r() を実行すると、次のコードが出力されます。$message_object はオブジェクトの名前です。

SimpleXMLElement Object
(
    [header] => SimpleXMLElement Object
        (
            [responsetime] => 2012-12-22T14:10:09+00:00
        )

    [data] => SimpleXMLElement Object
        (
            [id] => Array
                (
                    [0] => 65233
                    [1] => 65234
                )

            [account] => Array
                (
                    [0] => 20992
                    [1] => 20992
                )

            [shortcode] => Array
                (
                    [0] => 3255
                    [1] => 3255
                )

            [received] => Array
                (
                    [0] => 2012-12-22T11:04:30+00:00
                    [1] => 2012-12-22T11:31:08+00:00
                )

            [from] => Array
                (
                    [0] => 6121843347
                    [1] => 6121820166
                )

            [cnt] => Array
                (
                    [0] => 24
                    [1] => 25
                )

            [message] => Array
                (
                    [0] => Go tramping wellington 11-30
                    [1] => Go drinking Matakana 2pm
                )

        )

)

foreach を使用して、オブジェクトから id 配列を取得しようとしています。

foreach($message_object->data->id AS $id) {
    print_r($id);
}

次の返信が送信されます。

SimpleXMLElement Object ( [0] => 65233 ) SimpleXMLElement Object ( [0] => 65234 )

[0] の値を取得するにはどうすればよいですか、それとも間違っていますか? 結果をループしてオブジェクトキーを取得する方法はありますか?

$id[0] をエコーし​​ようとしましたが、結果が返されません。

4

3 に答える 3

4

で使用するprint_rSimpleXMLElement、その間に魔法があります。ですから、あなたが見るものは実際にはそこにあるものではありません。これは有益ですが、通常のオブジェクトや配列とは異なります。

反復する方法についての質問に答えるには:

foreach ($message_object->data->id as $id)
{
    echo $id, "\n";
}

それらを配列に変換する方法に答えるには:

$ids = iterator_to_array($message_object->data->id, 0);

これでも得られますがSimpleXMLElements、使用時にこれらの各要素を文字列にキャストできる値が必要な場合があります。例:

echo (string) $ids[1]; # output second id 65234

または、配列全体を文字列に変換します。

$ids = array_map('strval', iterator_to_array($message_object->data->id, 0));

または代わりに整数に:

$ids = array_map('intval', iterator_to_array($message_object->data->id, 0));
于 2012-12-22T02:54:23.123 に答える
1

SimpleXMLElementオブジェクトは次のようにキャストできます。

foreach ($message_object->data->id AS $id) {
    echo (string)$id, PHP_EOL;
    echo (int)$id, PHP_EOL; // should work too

    // hakre told me that this will work too ;-)
    echo $id, PHP_EOL;
}

または、すべてをキャストします。

$ids = array_map('intval', $message_object->data->id);
print_r($ids);

アップデート

さて、上記のarray_mapコードは厳密には配列ではないため、実際には機能しません。iterator_to_array($message_object->data_id, false)最初に適用する必要があります。

$ids = array_map('intval', iterator_to_array$message_object->data->id, false));

参照:@hakreの回答

于 2012-12-22T02:51:14.440 に答える
0

次のようにforeachを更新する必要があります。

foreach($message_object->data->id as $key => $value) {
    print_r($value);
}
于 2012-12-22T02:36:57.030 に答える