Search code examples
phparraysarray-mergeis-empty

Ignore empty strings in array_merge


I have 3 if statements (see code). Each for creating an array of email addresses. How can I merge those 3 strings into a $to (knowing that they could be empty or doesn't even exist)?

Apparently this doesn't work...

    if ( in_array('client', $measurement_mail_report_recipients) ) {

        $measurement_client_id = intval($_POST['acf']['field_5e147914518a6']);
        $list1 = array();

        if (have_rows('company_email_addresses', $measurement_client_id)) {
            while (have_rows('company_email_addresses', $measurement_client_id)) {
                the_row();
                $list1[] = get_sub_field('company_email_address');
            }
        }

    }

    if ( in_array('contact', $measurement_mail_report_recipients) ) {

        $measurement_contact_id = intval($_POST['acf']['field_5e149714d044e']);
        $list2 = array();

        if (have_rows('contact_email_addresses', $measurement_contact_id)) {
            while (have_rows('contact_email_addresses', $measurement_contact_id)) {
                the_row();
                $list2[] = get_sub_field('contact_email_address');
            }
        }

    }

    if ( in_array('extra', $measurement_mail_report_recipients) ) {

        $measurement_mail_extra_recipients = $_POST['acf']['field_5f71d4eaaf381'];

        if ( $measurement_mail_extra_recipients ) {
            $list3 = array();
            foreach( $measurement_mail_extra_recipients as $measurement_mail_extra_recipient ) {
                $list3[] = $measurement_mail_extra_recipient['field_5f71d55aaf382'];
            }
        }

    }

    $to         = array_merge($list1, $list2, $list3);

Solution

  • I know what I forgot. I had to declare the array empty in case the if statement wasn't triggered. Check my working code below:

        if ( in_array('client', $measurement_mail_report_recipients) ) {
    
            $measurement_client_id = intval($_POST['acf']['field_5e147914518a6']);
            $list1 = array();
    
            if (have_rows('company_email_addresses', $measurement_client_id)) {
                while (have_rows('company_email_addresses', $measurement_client_id)) {
                    the_row();
                    $list1[] = get_sub_field('company_email_address');
                }
            }
    
        } else { $list1 = array(); }
    
        if ( in_array('contact', $measurement_mail_report_recipients) ) {
    
            $measurement_contact_id = intval($_POST['acf']['field_5e149714d044e']);
            $list2 = array();
    
            if (have_rows('contact_email_addresses', $measurement_contact_id)) {
                while (have_rows('contact_email_addresses', $measurement_contact_id)) {
                    the_row();
                    $list2[] = get_sub_field('contact_email_address');
                }
            }
    
        } else { $list2 = array(); }
    
        if ( in_array('extra', $measurement_mail_report_recipients) ) {
    
            $measurement_mail_extra_recipients = $_POST['acf']['field_5f71d4eaaf381'];
    
            if ( $measurement_mail_extra_recipients ) {
                $list3 = array();
                foreach( $measurement_mail_extra_recipients as $measurement_mail_extra_recipient ) {
                    $list3[] = $measurement_mail_extra_recipient['field_5f71d55aaf382'];
                }
            }
    
        } else { $list3 = array(); }
    
        $recipients = array_merge($list1, $list2, $list3);
        $to         = array_filter($recipients);