只抓取数组内的某些数组

时间:2013-07-18 23:01:05

标签: php arrays

基本上,我收到来自 Yahoo Messenger API in PHP array(),我正在开发通知系统,它返回一个从聊天和我的联系人处收到 IM 的数组。

Array (
[0] => Array 
    (
        [message] => Array
            (
                [status] => 1
                [sequence] => 0
                [sender] => SenderCurtis
                [receiver] => receiverCurtis
                [msg] => #1
                [timeStamp] => 1374187598
                [hash] => y2qlDf8uTq8tXzgzrsSMyjQB+W2uDg==
                [msgContext] => y2qlDf8uTq8tXzgzrsSMyjQB+W2uDg==
            )

    )

[1] => Array
    (
        [buddyInfo] => Array
            (
                [sequence] => 1
                [contact] => Array
                    (
                        [0] => Array
                            (
                                [sender] => SenderCurtis
                                [presenceState] => 0
                                [avatarUser] => 0
                                [avatarPreference] => 0
                                [clientCapabilities] => 8915971
                                [clientUserGUID] => MI7STHUYOAMCGE5TNTY7CJPFWM
                            )

                    )

            )

    )

[2] => Array
    (
        [message] => Array
            (
                [status] => 1
                [sequence] => 2
                [sender] => SenderCurtis
                [receiver] => receiverCurtis
                [msg] => #2
                [timeStamp] => 1374187601
                [hash] => 3+2s9sIvjPRdvneQsMgVNCKBTFgKwQ==
                [msgContext] => 3+2s9sIvjPRdvneQsMgVNCKBTFgKwQ==
            )

    )

[3] => Array
    (
        [buddyInfo] => Array
            (
                [sequence] => 3
                [contact] => Array
                    (
                        [0] => Array
                            (
                                [sender] => myContactUser1@yahoo.com
                                [presenceState] => 0
                                [avatarUser] => 0
                                [avatarPreference] => 0
                                [clientCapabilities] => 8915971
                                [clientUserGUID] => UQU3WV7ZOZ2OTGLJQUE2QJU4ZU
                            )

                    )

            )

    )

)

如何抓取消息 array()并进行迭代?例如“消息1”,“消息2”等......

5 个答案:

答案 0 :(得分:1)

我认为array_map()是您在这里寻找的功能。 array_map函数允许您对现有数组的每个元素执行回调,并组装一个仅包含回调返回值的新数组。

你想要做的是这样的事情:

$data = // lets assume this is the data you received
$messages_data = array_map( "extract_message", $data );

function extract_message( $data_item ){
  if ( array_key_exists( 'message', $data_item ) ){
    return $data_item[ 'message' ];
  }
}

现在,您的$message_data数组将只包含原始数组中的消息数组。

答案 1 :(得分:1)

如果您尝试过滤键'message'的数组值,可以在PHP中执行以下操作:

$messages = array();

foreach ($response as $key => $data) {
    if (array_key_exists('message', $data)) {
        $msgArray = $data['message'];
        $messages[] = $msgArray;
    }
}

在上面的示例中,我将消息存储在自己的数组中。但是,如果你愿意的话,你也可以在for循环中处理数据。

答案 2 :(得分:0)

foreach ($var[0] as $key => $value)
{
    do things with each message
}

其中$var代替您的实际变量名称

答案 3 :(得分:0)

只需使用array_filter过滤您的数组。

  $messages = array_filter($data, function($a){ return isset($a["message"]); });

然后使用array_map删除不需要的中间数组。

  $messages = array_map(function($a){ return $a["message"]; }, $message);

然后你可以用foreach或其他任何东西迭代它。

答案 4 :(得分:0)

因为我喜欢这里的SPL迭代器另一种解决方案。适用于PHP> = 5.1.0。

class MessageIterator extends FilterIterator
{
    public function accept()
    {
        return array_key_exists('message', $this->getInnerIterator()->current());
    }

    public function current()
    {
        $current = parent::current();
        return $current['message'];
    }
}

$iterator = new MessageIterator(new ArrayIterator($array));

foreach ($iterator as $message) {
    print_r($message);
}