【问题标题】:Return part of string in array返回数组中字符串的一部分
【发布时间】:2016-01-12 07:18:36
【问题描述】:

所以我试图让这个小脚本工作起来很有趣,但无法让它工作, 我有一组随机名称,它们被分配了“随机”电子邮件地址,我想检查电子邮件地址是否有扩展名: '@hotmail.com', '@hotmail.ca',或 '@yahoo.ca' 。如果他们随后回显类似“Daniel,您的电子邮件地址扩展名是 $extension,您有资格”之类的内容 如果他们不只是说'Kayla,你的电子邮件地址是 $extension,你就没有资格。

我想添加一个 foreach 语句,说明对于数组 $ClassRoom2 中的每个人,我尝试使用 strstr(),但它在 foreach 中不起作用,因为它只能有一个字符串。

这是我到目前为止得到的:

qualify = "";       
 $ClassRoom2 =  array(
            'Daniel' => 'fresco@hotmail.com',
            'Mike' => 'dkoko@yahoo.ca',
            'Meranda' => 'brunnn_23@hotmail.ca',
            'Will' => 'yumyum03@wp.pl',
            'Brittey' => 's0sd@outlook.com',
            'Kayla' => 'hocklife@freebie.com' );


    switch ($ClassRoom2) {
        case '@hotmail.com': 
            echo 'You are using extension '. $final; $qualify = 1; break;

        case '@hotmail.ca':
            echo 'You are using extension '. $final; $qualify = 1; break;

        case '@yahoo.com':
            echo 'You are using extension '. $final; $quality = 1; break;

        case '@yahoo.ca':
            echo 'You are using extension '. $final; $qualify = 1; break;

        case '@live.ca':
            echo 'You are using extension '. $final; $quality = 1; break;

        default:
            echo 'its something else'; $qualify = 0;
            break;
    }


    if ($qualify == 1) {
        echo "Congratulations, you quality for the contest. The extension you chose was <b>$final</b>";
    } else {
        echo "Sorry mate! you didn't quality for the contest.";
    }

【问题讨论】:

标签: php arrays foreach


【解决方案1】:

使用explode()获取域部分并进行比较

$parts = explode("@", "johndoe@domain.com");
echo ($parts[1]=='domain.com') ? 'qualify' : 'not qualify';

【讨论】:

    【解决方案2】:

    抱歉我反应迟了,我还在测试我的代码示例。

    如果您想坚持使用您当前设计的开关,您可以使用简单的preg_match 来提取您需要的字符串。这是一个小例子(您可以删除评论并在那里放入您的开关):

    <?php
    $ClassRoom2 =  array(   
        'Daniel' => 'fresco@hotmail.com',
        'Mike' => 'dkoko@yahoo.ca',
        'Meranda' => 'brunnn_23@hotmail.ca',
        'Will' => 'yumyum03@wp.pl',
        'Brittey' => 's0sd@outlook.com',
        'Kayla' => 'hocklife@freebie.com' 
    );
    
    foreach ($ClassRoom2 as $name=>$email) {
        $matches = [];
        preg_match( "/(@.+)/", $email, $matches);
    
        // Do things with $matches[0] here (your switch for eg)
        // switch ($matches[0]) {
        //    case '@hotmail.com': 
        //    ...
    
        print '<br/> ' . $matches[0];
    }
    ?>
    

    如果你愿意,你可以在这个网站上摆弄预赛:regexr

    更新你可以用preg_match做很多事情,一旦你掌握了它:)

    foreach ($ClassRoom2 as $name=>$email) {
        $matches = preg_match( "/@(hotmail.com|hotmail.ca|yahoo.ca|yahoo.com|live.ca)/", $email);
        // if ($matches) // or simply replace the preg_match in the if
        print '<br/> ' . $email . ($matches ? ' qualifies' : ' <strong>does not qualify</strong> ') .  'for the email test';
    }
    

    【讨论】:

      【解决方案3】:

      我会将条目列表和符合条件的扩展名放在单独的数组中,然后检查每个人的条目并解析他们的信息以查看每个人是否符合条件,如下所示:

      $peoplelist =  array(
          'Daniel' => 'fresco@hotmail.com',
          'Mike' => 'dkoko@yahoo.ca',
          'Meranda' => 'brunnn_23@hotmail.ca',
          'Will' => 'yumyum03@wp.pl',
          'Brittey' => 's0sd@outlook.com',
          'Kayla' => 'hocklife@freebie.com' 
      );
      
      $qualify = array(
          'hotmail.com', 
          'hotmail.ca', 
          'yahoo.com', 
          'yahoo.ca', 
          'live.ca', 
      );
      
      foreach( $peoplelist as $name => $email )
      {
          $parts = explode( "@", $email ); 
          $extension = strtolower( trim( array_pop( $parts ) ) );
      
          echo "Hi, ".$name.". You are using extension @".$extension.". <br /> \n";
      
          if( in_array( $extension, $qualify ) )
          {
              echo "Congratulations, you quality for the contest. <br /> \n";
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-15
        • 2016-05-15
        • 2011-03-03
        • 1970-01-01
        相关资源
        最近更新 更多