如何使用PHP访问嵌套在JSON元素中的数组。以下是我正在使用的代码(示例简化),我可以轻松访问from_email, html, subject
等,但如何访问to
电子邮件地址recipient@addresshere.co.uk
?我是否需要某种foreach
循环,因为可能有多个条目?
JSON
{
"event": "inbound",
"msg": {
"dkim": {},
"email": "myemail@addresshere.co.uk",
"from_email": "example.sender@mandrillapp.com",
"headers": {},
"html": "This is an example inbound message.",
"raw_msg": "Received: from mail115.us4.mandrillapp.com",
"sender": null,
"spam_report": {},
"spf": {},
"subject": "This is an example webhook message",
"tags": [ ],
"template": null,
"text": "This is an example inbound message.",
"text_flowed": false,
"to": [
[
"recipient@addresshere.co.uk",
null
]
]
}
}
PHP
$emailp = urldecode($_REQUEST['mandrill_events']); // The above JSON
$email = array_pop(json_decode($emailp));
$from_email = $email->msg->from_email; // From email
$html = $email->msg->html; // HTML Message
$subject = $email->msg->subject; // Subject
$to = ????
由于
答案 0 :(得分:0)
您可以按照建议使用foreach
循环遍历数组。例如,这将回显“到”地址:
$to_arr = $email->msg->to[0];
foreach($to_arr as $to) {
echo 'TO = '.$to.'<br />';
}
答案 1 :(得分:0)
使用true
作为第二个函数参数,对象将被转换为关联数组。
$email = json_decode($emailp, true);
然后,您可以轻松访问阵列中的任何数据,甚至可以根据需要使用foreach。
print_r($email['msg']['to']);
退出
Array ( [0] => Array ( [0] => recipient@addresshere.co.uk [1] => ) )
答案 2 :(得分:0)
这取决于您对数据的期望。由于它是一个数组,因此它可能包含0个或更多元素。您打算如何处理所有案件?如果你希望只有一个,只需要第一个元素。如果你想要一个数组中的所有电子邮件,那么就把整个事情$to = $email->msg->to;
。
如果您打算使用此信息来触发实际的电子邮件,那么是的,您确实要迭代所有元素。
$msg = new Email();
$msg->setSubject($subject);
// more logic
foreach($recepients as $recepient) {
// assuming element 0 is email and element 1 is name
$msg->addRecepient($recepient[0], $recepient[1]);
}
答案 3 :(得分:0)
您可以像这样访问to
$email->msg->to[0][0];
如果你想循环整个阵列,你可以做
foreach ($email->msg->to[0] as $i=>$v) {
echo "i = $i and v = $v\n";
}
或者如果你想循环整个to
结构
foreach ($json->msg->to as $i=>$v) {
foreach ($v as $ii=>$vv) {
echo "ii = $ii - vv = $vv\n";
}
}