簡體   English   中英

從數據數組中排除一個值

[英]Excluding a value from an array of data

在我的in_array中,我可以從$row->guestEmail排除特定術語嗎?

例如, @example.comexample1.com$row->guestEmail值的禁止子字符串。

這是我嘗試過的:

foreach ($json->data as $row) {   
    if (!in_array($row->guestEmail, $emails)
            && date('Y-m-d', strtotime($row->endDate))== date('Y-m-d')) {
        $guests[] = array(
            'FirstName'      => $row->guestFirstName,
            'LastName'       => $row->guestLastName,
            'email'          => $row->guestEmail,
            'country'        => $row->guestCountry,
            'check-in_date'  => $row->startDate,
            'check-out_date' => $row->endDate,
        );
        $emails[] = $row->guestEmail;
    }
}

如果您想要一個靈活的解決方案來擴展您的電子郵件黑名單,您可以使用preg_match()和基於您的不合格電子郵件數組的動態正則表達式模式。

\\Q...\\E語法確保模式中的符號按literally處理。 這與preg_quote()效果相同(沒有函數調用)。

代碼:(演示

$objs = (object)[
    'data' => [
        (object)['guestEmail' => 'bad@example.com'],
        (object)['guestEmail' => 'okay@goodstuff.com'],
        (object)['guestEmail' => 'nope@example1.com']
    ]
];

$blacklist = ['@example.com',  'example1.com'];
$regex = '~\Q' . implode('\E|\Q', $blacklist) . '\E~';

foreach ($objs->data as $row) {
    if (!preg_match($regex, $row->guestEmail)) {    
        $emails[] = $row->guestEmail;
    }
}

var_export($emails);

輸出:

array (
  0 => 'okay@goodstuff.com',
)

如果你不喜歡正則表達式的想法,你可以為黑名單中的每個元素迭代調用stripos() stripos()會比substr_count()表現得更好,因為substr_count()會一直讀取字符串到最后(試圖給出找到的字符串數量的准確計數)。 stripos()一旦發現第一次出現就會停止——這是最佳的代碼設計。

代碼:(演示

foreach ($objs->data as $row) {
    foreach ($blacklist as $forbidden_string) {
        if (stripos($row->guestEmail, $forbidden_string) !== false) {
            continue 2;
        }
    }
    $emails[] = $row->guestEmail;
}
// same result as first snippet

你可以這樣做:

if (!in_array($row->guestEmail, $emails)
            && date('Y-m-d', strtotime($row->endDate))== date('Y-m-d') && substr_count($row->guestEmail, 'example.com') < '1' && substr_count($row->guestEmail, 'example1.com') < '1') {

//your code

希望能幫到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM