我有以下
array
,是从 WP REST API
的 JSON 响应转换而来的:
[
[
'id' => 6,
'convite_id' => [4],
'nome_do_convidado' => 'John Doe',
'email_do_convidado' => ['[email protected]', 'another@example'],
],
[
'id' => 5,
'convite_id' => [4],
'nome_do_convidado' => 'Lorem',
'email_do_convidado' => ['[email protected]'],
],
]
我正在尝试将
email_do_convidado
值循环为:
我尝试过使用
foreach()
循环并只得到最后一个,现在我尝试使用 while()
也得到一个结果,请按照我的脚本操作:
while (list ($key, $val) = each ($myArray) )
echo $val['email_do_convidado'][$key];
结果是:
[email protected]
我在这里做错了什么?
尝试使用 foreach 而不是 while。您可以通过将所有数组合并到最终输出中来提取所有电子邮件。
$emails = [];
foreach($myArray as $entry){
$emails = array_merge($emails, $entry['email_do_convidado']);
}
var_dump($emails);
我想您会在处理完所有电子邮件后想做点什么。我把这个留给你。
不太清楚,我的理解是你想要每个元素的第一封电子邮件,如果是这样的话你可以这样做
foreach($array as $value){
echo $value[email_do_convidado][0];
}
另一方面,如果你在“email_do_convidado”中有几封电子邮件,你可以循环其他数组
foreach($array as $value){
foreach($value[email_do_convidado] as $email){
echo $email;
}
}
或者如果你不想在 foreach 中使用 foreach 你可以
//inside the first foreach.
$emails = implode(',', $value[email_do_convidado]);
//and the u echo $emails
echo $emails;
希望我的回答对你有帮助。
您所寻求的价值在于:
$myArray[0]['email_do_convidado'][0]
$myArray[1]['email_do_convidado'][0]
您的代码是:
while (list ($key, $val) = each ($myArray) ) {
echo $val['email_do_convidado'][$key];
}
(稍微修改为更好的风格)
所以你的代码正在尝试检索
$myArray[0]['email_do_convidado'][0]
$myArray[1]['email_do_convidado'][1]
后者不存在。所以我担心你在多个层面上都失败了:
尝试:
echo $val['email_do_convidado'][0];
foreach()
循环将允许使用数组解构语法将数组数据解包到变量中,但下面的示例将仅获取每个子集中的第一封电子邮件。
代码:(演示)
foreach ($array as ['email_do_convidado' => [$email]]) {
echo "$email\n";
}
结果:
[email protected]
[email protected]
如果您的输入数组每个子集有多个电子邮件,则您需要一个嵌套迭代器,例如:(Demo)
foreach ($array as ['email_do_convidado' => $emails]) {
foreach ($emails as $email) {
echo "$email\n";
}
}
如果您只想将所有电子邮件作为分隔字符串获取,则可以使用函数式编程来隔离一列值,展平结果,然后内爆。 (演示)
echo implode(
"\n",
array_merge(
...array_column(
$array,
'email_do_convidado'
)
)
);