繁体   English   中英

使用PHP访问JSON元素内的数组

[英]Access array inside JSON element using PHP

如何使用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 = ????

谢谢

如您所建议,您可以使用foreach在数组中循环。 例如,这将回显“收件人”地址:

$to_arr = $email->msg->to[0];
foreach($to_arr as $to) {
    echo 'TO = '.$to.'<br />';
}

使用true作为第二个函数参数,对象将被转换为关联数组。

$email = json_decode($emailp, true);

然后,您可以轻松访问阵列中的任何数据,甚至在需要时使用foreach。

print_r($email['msg']['to']);

进入

Array ( [0] => Array ( [0] => recipient@addresshere.co.uk [1] => ) )

这取决于您对数据的期望。 由于它是一个数组,因此其中可以包含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]);
}

你会进入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";
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM