【问题标题】:PHP remove ', ' from string if doesn't exist如果不存在,PHP 从字符串中删除 ', '
【发布时间】:2014-01-20 20:53:46
【问题描述】:

我正在运行这段代码:

$stmt = $pdo_conn->prepare("SELECT * from admin where support_emails = :support_emails and logged = :logged and disabled = :disabled ");
        $stmt->execute(array(':support_emails' => 'Y', ':logged' => 'in', ':disabled' => ''));
        $records = $stmt->fetchAll(PDO::FETCH_ASSOC);
        if(count($records) > 0) {
            foreach($records as $records2) {
                if(filter_var($records2["email"], FILTER_VALIDATE_EMAIL)) {
                    $SupportEmailList = $records2["email"].', '.$SupportEmailList;
                }
                if(!empty($SupportEmailList)) {
                    $SupportEmailList = substr($SupportEmailList, 0, -2); // removes last 2 characters (`, `) from end of string
                }
            }
        }

返回

email1@domain1.com, email2@domain2.com

当我在 SQL 中运行时

我已添加:

if(!empty($SupportEmailList)) {
                    $SupportEmailList = substr($SupportEmailList, 0, -2); // removes last 2 characters (`, `) from end of string
                }

如果最后一个结果不存在,则从字符串末尾删除', ',但它似乎正在创建以下内容:

email1@domain1.com, email2@domain2.c

而不是:

email1@domain1.com, email2@domain2.com

【问题讨论】:

  • 您想将每个电子邮件地址添加到由 , 分隔的字符串中吗?
  • 是的,基本上创建一个字符串,其中所有从数据库返回的电子邮件地址用逗号分隔

标签: php


【解决方案1】:

我建议将您的结果保存在一个数组中,并使用implode(或加入)用逗号将它们连接起来。

这样您就不必处理尾随逗号问题。

$email_address = array();

foreach($records as $records2) {
    if(filter_var($records2["email"], FILTER_VALIDATE_EMAIL)) {
        array_push($email_address, $records2["email"]);
    }
}

$comma_separated_email_address = implode(",", $email_address);

echo $comma_separated_email_address ;

【讨论】:

    【解决方案2】:

    试试trim()。您可以传递一个字符列表作为第二个参数来选择要从字符串的开头/结尾修剪的内容:

    $example_1 = 'email1@domain1.com, email2@domain2.com';
    $example_2 = 'email1@domain1.com, email2@domain2.com, ';
    
    $example_1 = trim($example_1, ', ');
    $example_2 = trim($example_2, ', ');
    
    var_dump($example_1); // string(38) "email1@domain1.com, email2@domain2.com"
    var_dump($example_2); // string(38) "email1@domain1.com, email2@domain2.com"
    
    var_dump(explode(', ', $example_1));
    // array(2) { [0]=> string(18) "email1@domain1.com" [1]=> string(18) "email2@domain2.com" }
    

    【讨论】:

    • trim() 从字符串的开头和结尾修剪字符 (, )。你想做什么?如果您想按, 拆分,请尝试explode()
    • trim 仅用于字符串的开头和结尾。
    • @SenseException 我只是在回答 OP 的问题:从字符串末尾删除 ', '..尽管这似乎取决于某种解释。
    • 我在回答一个关于 trim 是否只是从末尾删除 ', ' 的问题。问题评论已被删除:-)
    【解决方案3】:

    您可以再次使用explodeimplode 拆分字符串

    $data = explode(',', $elements);
    $cleanedData = implode(',', $data);
    

    您可以修剪数据中的空间,修剪 $data 数组中的所有值

    for ($i = 0; $i < count($data); $i++)
        $data[$i] = trim($data[$i]);
    

    【讨论】:

      【解决方案4】:

      我不明白你的问题,如果它不存在,请删除它?无论如何,您应该使用PDO::FETCH_NUM 获取您的数据。这样,您将收到一系列电子邮件,例如['email1@domail.com', 'email2@mail.com'],然后如果您想要'email1@domail.com, email2@mail.com' 之类的电子邮件,请使用implode 将元素与字符串连接起来。

      【讨论】:

        【解决方案5】:

        这样做:

        $emails  = " email1@domain1.com , fsdfsdffdsffds , email2@domain2.com,sddsfsdsd ";
        $emails = array_map('trim',explode(',',$emails));
        
        $out = array_map(function($email){
                        return (filter_var($email, FILTER_VALIDATE_EMAIL)) ? $email : null;
                     },$emails);
        
        $emails = implode(',',array_filter($out));
        print_r($emails);
        // email1@domain1.com,email2@domain2.com
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-23
          • 2013-05-19
          • 2014-08-26
          相关资源
          最近更新 更多