所以我一直在尝试做的是,检查一些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'
}
答案 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;