我的PHP正在接收这样的数据:
if !findNoCase( styleString, 'BebasNeue'){
styleString = REReplace(style, 'font-family:[^"|^;]*', "font-family:swiss7; font-size:12", "ALL");
}
所以,我接着做了这样的事情:
[
{
"EMAIL": "hello@example.com",
"GENDER": "Male"
},
{
"EMAIL": "info@example.com",
"GENDER": "Male"
}
]
问题是$entityBody=json_decode($data); //$data like the array above
foreach($entityBody as $value){
$email = $value->EMAIL;
//do something with $email
只运行一次,我可以成功处理第一个对象中的电子邮件地址。但其余的都被忽略了。因此,就上述数据而言,我只需获取hello@example.com,而不是info@example.com。
如何调整foreach
?
编辑:完整代码遵循Sendgrid要求您发送它的janky方式。
foreach
答案 0 :(得分:0)
的第一强>
使用json_decode
时,返回的值是关联数组而不是对象。
因此,您的代码$value->EMAIL
无效。
<强>第二强>
解码后的JSON会变成这样:
[
[
"EMAIL" => "hello@example.com",
"GENDER" => "Male"
],
[
"EMAIL" => "info@example.com",
"GENDER" => "Male"
]
]
因此,在foreach ($entityBody as $value)
中,$value
指向数组而不是值。
因此,$email = $value['EMAIL']
也会失败。
<强>解决方案强>
使用双foreach
:
$data = '[
{
"EMAIL": "hello@example.com",
"GENDER": "Male"
},
{
"EMAIL": "info@example.com",
"GENDER": "Male"
}
]';
$entityBody = json_decode($data);
foreach ($entityBody as $value){
// Remember $value === array
foreach ($value as $key => $val){
// You can process your data here
if ($key === 'EMAIL')
echo "Email: {$val}<br>";
else if ($key === 'GENDER')
echo "Gender: {$val}<br>";
}
}
您可以通过在PhpFiddle
中对其进行复制粘贴来运行上述代码修改强>
Apparently json_decode
returns object for {...}
data format
所以你可以使用以下代码:
foreach ($entityBody as $value){
$email = isset($value->EMAIL) ? $value->EMAIL : false;
$gender = isset($value->GENDER) ? $value->GENDER : false;
}
这使您的代码完美无缺。
我认为使您的代码只运行一次的原因是,在foreach
的第二次迭代中,找不到值$value->EMAIL
,因此抛出错误并中断执行。
解决方案首先使用isset()
检查数据。