skip to Main Content

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:


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

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:


[email protected]@[email protected]

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

2

Answers


  1. 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:

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

    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:

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

    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.

    Login or Signup to reply.
  2. 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]

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search