strpos(),循环中来自数据库的字符串

时间:2015-01-05 10:37:38

标签: php codeigniter-2

所以我一直在尝试做的是,检查一些URL以查看它们中是否有特定的TLD。例如:

**

  

如果foo.edu中有.edu。

**

为此我在我的数据库中有一个表,其中添加了一些TLD,如.gov,.edu等

我一直在尝试创建一个函数,用于将给定的URL与数据库中的字符串(TLDS)进行比较。我遇到的有点奇怪,或者我只是筋疲力尽,我想不出别的什么。该函数应该告诉我它是否确实在url中找到了任何这样的字符串(HERE:TLD),但情况有所不同:

strpos_array()是我用来在strpos();

中获取数组的函数

代码:

public function get_specialTLD(){

    $query = $this->db->select('TLD');
    $query = $this->db->from('foo_tlds');
    $query = $this->db->get();

     return $query->result_array(); //outputs the list of TLDS in the table 
}

应根据每个TLD检查网址

public function specialCheck($site){

    $tlds = $this->get_specialTLD();

    foreach($tlds as $tld){
        $exploded = explode(' ',$tld['TLD']); 
        if($this->strpos_array($site, $exploded)>0){
            echo 'spl';
    }else{
        echo 'no';
    }
}
}

现在在这种情况下输出的是

no no spl (如果发现此TLD的索引(例如:.edu)匹配)。 如果我改为尝试返回布尔值而不是回显,那么它显然会在检查的第一个实例处停止,即 如果没有找到匹配项,它将返回FALSE,其他TLD将不会检查URL。

我怀疑这是因为只使用foreach(),也许我应该使用别的东西。或者我应该坚持使用strstr

的硬编码方法
if ((strstr($site,".gov")) or (strstr($site,".edu")) or (strstr($site,".net"))) )
     {
       echo 'Spl'
     }

2 个答案:

答案 0 :(得分:1)

为什么不这样做?

  

public function specialCheck($ site){

$tlds = $this->get_specialTLD();

foreach($tlds as $tld){
    $exploded = explode(' ',$tld['TLD']); 
    if($this->strpos_array($site, $exploded)>0){
        return TRUE;
    }
 }

 return FALSE;
     

}

在这种情况下,如果找到匹配,则返回TRUE,否则返回FALSE。

在找到匹配项或检查完所有TLD之前,它不会退出。

答案 1 :(得分:0)

如果我正确理解您的问题,您需要break

$found = false;
foreach($tlds as $tld){
    $exploded = explode(' ',$tld['TLD']); 
    if($this->strpos_array($site, $exploded)>0){
        echo 'spl';
        $found = true;
        break;
    }else{
       echo 'no';
    }
}
return $found;