Цикл Foreach удаляет все данные из результата

63
4

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

Если я stripos и запускаю с помощью базового оператора 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,
);
}
}
}

спросил(а) 2021-01-27T17:19:21+03:00 4 месяца, 4 недели назад
1
Решение
63

$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,
);
}
}

ответил(а) 2021-01-27T17:19:21+03:00 4 месяца, 4 недели назад
45

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

$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 

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

ответил(а) 2021-01-27T17:19:21+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема