【问题标题】:Skip results inside a foreach loop - pdo在 foreach 循环中跳过结果 - pdo
【发布时间】:2016-05-31 16:29:58
【问题描述】:

在我的数据库中,我存储电子邮件地址。在 foreach 循环中,如何跳过所有具有 @sample.com.ru 的电子邮件地址?

$sql = "SELECT * FROM myMovieCustomers";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$result = $stmt->fetchAll();

foreach ($result as $row) {
    //skip if $row['email'] contains @sample.com.ru{
        //do someting with these
    //}
} 

【问题讨论】:

  • strpos() + continue;
  • 您可以将其添加到查询的 where 子句中,例如 ..where email like '%@sample.com.ru'
  • 哦错过了..email not like '%@sample.com.ru' 会工作
  • @Becky 使用andemail NOT LIKE '%@sample1.com.ru' and email '%@sample2.com.ru'。或者您可以使用正则表达式并允许任何数字跟随sample。类似email not regexp 'sample[0-9]+\.com.ru'
  • @SgtAJ %wildcard@ 是地址的一部分

标签: php mysql pdo


【解决方案1】:

出于几个原因,在数据库级别进行过滤会更有效

  • 您不会浪费网络资源通过网络传输不需要的数据
  • 使用索引良好的表,DBMS 进行搜索的速度将比 php 使用结果数据更快

正如 cmets 和其他答案中所指出的,您可以使用 LIKE 运算符

$sql = "SELECT * FROM myMovieCustomers WHERE email NOT LIKE '%@sample.com.ru'";

【讨论】:

    【解决方案2】:

    你可以通过使用下面的php函数strstr()来实现你想要的:

    $all = array(
                'name' => array('Thanga','Kima','Zara'),
                'email'=> array('thanga@gmail.com','kima@gmail.com','zara@sample.com.ru')
                );
    
    echo '<pre>';
    print_r($all);
    foreach($all as $key=>$val):
        foreach ($val as $k=>$v):
            if(strstr($v,'@')=='@sample.com.ru'){
            }else{
                echo $v;
            }
        endforeach;
    endforeach;
    

    【讨论】:

    • 为什么不在你的 if 语句中加入!= 而不是空白的==
    【解决方案3】:

    只需更改第一行...

    $sql = "SELECT * FROM myMovieCustomers WHERE email NOT LIKE'%@sample.com.ru'";
    

    【讨论】:

    • 你缺少结尾单引号
    • @barry: 缺少最后一个双引号之前的单引号 :) 它应该像 '%@sample.com.ru'"
    猜你喜欢
    • 2015-07-23
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 2012-10-09
    • 2023-03-14
    • 1970-01-01
    • 2020-08-13
    • 2014-12-05
    相关资源
    最近更新 更多