基本上,我收到来自 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”等......
答案 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);
}