循环仅从数组返回一个值

问题描述 投票:0回答:4

我有以下

array
,是从
JSON response
WP REST API
转换而来的:

Array
(
    [0] => Array
        (
            [id] => 6
            [convite_id] => Array
                (
                    [0] => 4
                )

            [nome_do_convidado] => John Doe
            [email_do_convidado] => Array
                (
                    [0] => [email protected]
                )

        )

    [1] => Array
        (
            [id] => 5
            [convite_id] => Array
                (
                    [0] => 4
                )

            [nome_do_convidado] => Lorem
            [email_do_convidado] => Array
                (
                    [0] => [email protected]
                )

        )

)

我正在尝试将

[email_do_convidado]
值循环为:

我尝试过使用

foreach()
循环并只得到最后一个,现在我尝试使用
while()
也得到一个结果,请按照我的脚本操作:

while (list ($key, $val) = each ($myArray) ) echo $val['email_do_convidado'][$key]; 

结果是:

我在这里做错了什么?

php arrays loops
4个回答
2
投票

尝试使用 foreach 而不是 while。您可以通过将所有数组合并到最终输出中来提取所有电子邮件。

$emails = [];
foreach($myArray as $entry){
  $emails = array_merge($emails, $entry['email_do_convidado']);
}

var_dump($emails);

我想您会在处理完所有电子邮件后想做点什么。我把这个留给你。


0
投票

不太清楚,我的理解是你想要每个元素的第一封电子邮件,如果是这样的话你可以这样做

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;

希望我的回答对你有帮助。


0
投票

您所寻求的价值在于:

$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]

后者不存在。所以我担心你在多个层面上都失败了:

  • 你的代码没有达到你的预期
  • 您的错误报告不起作用(PHP 正在抛出有关您没有看到的警告)
  • 您还没有尝试检测您的代码来查看发生了什么(只需在 echo 语句中的值之前添加“email=”即可揭示这一点)。

尝试:

echo $val['email_do_convidado'][0]; 

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'
             )
         )
     );
© www.soinside.com 2019 - 2024. All rights reserved.