Цикл Foreach, удаляющий все данные из результата - PullRequest
0 голосов
/ 01 октября 2018

В приведенном ниже коде я создал черный список электронных писем, которые я хотел бы удалить, однако я получаю пустой массив при запуске с if(stripos($row->guestEmail, $b))

Если я удаляю stripos ивыполнить с базовым оператором if if($row->guestEmail), он показывает все данные, включая адреса электронной почты, которых нет в $blacklist.

Почему черный список foreach отбирает все данные?

$guests = [];
$emails = [];
$blacklist = ['@booking.com', 'N/A', 'n.c@nc.com', 'n.c@nc.com'];
$date = date('Y-m-d');

foreach ($results->data as $row) {
    $emails[] = $row->guestEmail;
    foreach ($blacklist as $b) {
        if (stripos($row->guestEmail, $b) !== false && date('Y-m-d', strtotime($row->endDate)) == $date) {

            $guests[] = array(
                'FirstName' => $row->guestFirstName,
                'LastName' => $row->guestLastName,
                'email' => $row->guestEmail,
                'country' => $row->guestCountry,
                'check-in_date' => $row->startDate,
                'check-out_date' => $row->endDate,
            );
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 01 октября 2018
$guests = [];
$emails = [];
$blacklist = ['@booking.com', 'N/A', 'n.c@nc.com', 'n.c@nc.com'];
$date = date('Y-m-d');

foreach ($results->data as $row) {
    $emails[] = $row->guestEmail;

    //check for all blacklist flags
    $blackListed = false;
    foreach ($blacklist as $b) {
        if (stripos($row->guestEmail, $b) !== false) {
            $blackListed = true;
            break;
        }
    }

    //if all pass and date is good, we're good
    if (!$blackListed && date('Y-m-d', strtotime($row->endDate)) == $date) {
        $guests[] = array(
            'FirstName' => $row->guestFirstName,
            'LastName' => $row->guestLastName,
            'email' => $row->guestEmail,
            'country' => $row->guestCountry,
            'check-in_date' => $row->startDate,
            'check-out_date' => $row->endDate,
        );
    }
}
0 голосов
/ 01 октября 2018

Попробуйте вместо этого:

$guests = [];
$emails = [];
$blacklist = ['@booking.com', 'N/A', 'n.c@nc.com', 'n.c@nc.com'];
$date = date('Y-m-d');

foreach ($results->data as $row) {
    $emails[] = $row->guestEmail;
    foreach ($blacklist as $b) {
        if (stripos($row->guestEmail, $b) === false && date('Y-m-d', strtotime($row->endDate)) == $date) {

            $guests[] = array(
                'FirstName' => $row->guestFirstName,
                'LastName' => $row->guestLastName,
                'email' => $row->guestEmail,
                'country' => $row->guestCountry,
                'check-in_date' => $row->startDate,
                'check-out_date' => $row->endDate,
            );
        }
    }
}

Проблема была в

stripos($row->guestEmail, $b) !== false 

Это условие противоположно тому, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...