【问题标题】:separate resulting values from a foreach with commas用逗号将结果值与 foreach 分开
【发布时间】:2021-12-31 06:22:35
【问题描述】:

我正在使用 add_user_meta 将值保存在同一个元键中。

我需要的是在使用 foreach 获取它们时用逗号分隔它们,以便我可以通过 wp_mail 发送它们。

我需要这样的东西:


1@gmail.com, 2@hotmail.com, 3@gmail.com

但是当直接获取它们时,它会将它们全部返回并粘合在一起。

有什么帮助吗?


$email = get_user_meta ($vendor_id, 'list_email', false);

foreach ($email as $emails) {
    echo $emails;
}

结果:


1@gmail.com2@hotmail.com3@gmail.com

我尝试了一些选项,但前面的逗号必须来自第二封电子邮件才能在 wp_mail 中读取,我不明白该怎么做

【问题讨论】:

  • 你能在foreach之前做print_r( $email );并分享输出吗?
  • 是的,结果如下:Array ( [0] => 1@gmail.com [1] => 2@gmail.com [2] => 3@gmail.com [3] => 4@gmail.com [4] => 5@gmail.com [5] => 6@gmail.com [6] => 7@gmail.com [7] => 8@gmail.com [8] => 9@gmail.com [9] => 10@gmail.com)

标签: php wordpress wp-mail


【解决方案1】:

您只需要在循环中附加“,”,然后使用 PHP rtrim() 函数删除最后一个“,”。 这段代码会做你想做的事:

$email = ['1@gmail.com', '2@gmail.com', '3@gmail.com', '4@gmail.com'];
$output = '';
foreach ( $email as $emails ) {
  $output .= $emails . ', ';
}
$output = rtrim( $output, ', ' );
echo $output;

输出:

1@gmail.com, 2@gmail.com, 3@gmail.com, 4@gmail.com 

编辑:感谢 Vee 的提及,对此有更简单的解决方案,即使用 implode() 函数,如下所示:

$email = ['1@gmail.com', '2@gmail.com', '3@gmail.com', '4@gmail.com'];
$output = implode(', ', $email);
echo $output;

结果:

1@gmail.com, 2@gmail.com, 3@gmail.com, 4@gmail.com

提示:始终尝试为您的变量使用正确的名称,在这里您应该使用 $emails 来表示电子邮件数组,而使用 $email 来表示单个电子邮件项。

【讨论】:

  • 准备好了,你的答案很棒!从已经非常感谢了。解决了!!
  • 很高兴帮助你,愉快的编码:)
【解决方案2】:

如果电子邮件是这样的数组。

$emails = ['n1@email.tld', 'n2@email.tld', 'n3@email.tld'];

使用array_key_last()

if (! function_exists("array_key_last")) {
    /**
     * Get last array key for PHP version older than 7.3.
     *
     * @link https://www.php.net/manual/en/function.array-key-last.php#123016
     * @param array $array
     * @return int|string|null
     */
    function array_key_last($array) {
        if (!is_array($array) || empty($array)) {
            return NULL;
        }
       
        return array_keys($array)[count($array)-1];
    }
}
foreach ($emails as $index => $email) {
    echo $email;
    if (array_key_last($emails) !== $index) {
        echo ', ';
    }
}

使用implode()

echo implode(', ', $emails);

所有这些结果:

n1@email.tld、n2@email.tld、n3@email.tld

【讨论】:

  • 非常感谢您的回答,上一个很有用,反正我标记为有效,谢谢
  • @mario 没问题。 Mohandes 的回答效果很好。我会投票赞成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-20
  • 2012-02-17
  • 2021-07-02
  • 2016-03-08
  • 2021-07-07
相关资源
最近更新 更多