Home > Enterprise >  separate resulting values from a foreach with commas
separate resulting values from a foreach with commas

Time:11-22

I am saving values with add_user_meta within the same meta key.

What I need is to separate them with commas when getting them with foreach so I can send them by wp_mail.

I need something like this:


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

but when obtaining them directly, it returns them all together and glued.

some help?


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

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

Result:


1@[email protected]@gmail.com

I tried some options, but the comma in front must be from the second email to be readable in wp_mail and I don't understand how to do it

CodePudding user response:

You just need to append the "," in your loop and then remove the last "," using PHP rtrim() function. This code will do what you want:

$email = ['[email protected]', '[email protected]', '[email protected]', '[email protected]'];
$output = '';
foreach ( $email as $emails ) {
  $output .= $emails . ', ';
}
$output = rtrim( $output, ', ' );
echo $output;

The output:

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

Edit: Thanks Vee for mentioning, there is way simpler solution for this that is Using implode() function, like this:

$email = ['[email protected]', '[email protected]', '[email protected]', '[email protected]'];
$output = implode(', ', $email);
echo $output;

Result:

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

Tip: Always try to use proper names for your variables, here you should use $emails for the array of emails and $email for the single email item.

CodePudding user response:

If emails are array like this.

$emails = ['[email protected]', '[email protected]', '[email protected]'];

Use 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 ', ';
    }
}

Use implode().

echo implode(', ', $emails);

All of these result:

[email protected], [email protected], [email protected]

  • Related