像SQL“LIKE”之类的东西,但在PHP中

时间:2017-11-04 05:47:40

标签: php

我的数据库中的网址很少,如下所示:

id url

1 http://test.com/embed-990.html
2. http://test2.com/embed-011.html
3. http://test3.com/embed-022.html

如果一个url在数据库中不存在,只是为了加载另一个,我怎么能创建一个简单的PHP代码?我也需要按域检查这些网址。

例如:

if($data['url'] == "test.com") {
 echo "my embed code number 1";
} elseif($data['url'] == "test2.com") {
 echo "my another embed code";
}

3 个答案:

答案 0 :(得分:2)

您可以parse the URL获取主机然后进行比较。

$dataurl = array('http://test.com/embed-990.html', 
                 'http://test2.com/embed-011.html',
                 'http://test3.com/embed-022.html');
foreach($dataurl as $url) {
    switch(parse_url($url, PHP_URL_HOST)) {
        case 'test.com':
            echo 'test domain';
        break;
        case 'test2.com':
            echo 'test domain 2';
        break;
        default:
            echo 'unknown';
        break;
    }
    echo $url . PHP_EOL;
}

演示:https://3v4l.org/nmukK

对于问题Something like SQL “LIKE”,您可以在preg_match中使用正则表达式。

答案 1 :(得分:0)

您可以使用substr_count

if (substr_count($data['url'], 'test.com') > 0) {
    echo "my embed code number 1";
}
else if (substr_count($data['url'], 'test2.com') > 0) {
    echo "my embed code number 2";
}

strpos

if (strpos($data['url'],'test.com') !== false) {
    echo "my embed code number 1";
}
else if (strpos($data['url'],'test2.com') !== false) {
    echo "my embed code number 2";
}

preg_match

if(preg_match('/test.com/',$data['url']))
{
    echo "my embed code number 1";
}
else if(preg_match('/test2.com/',$data['url']))
{
    echo "my embed code number 2";
}

答案 2 :(得分:0)

您可以使用Regx

$domains = ['test.com', 'test1.com', 'test20.com'];
foreach( $domains as $domain ){
    if(preg_match('/test([0-9]*)\.com/', $domain, $match)){
        echo "my embed code number {$match[1]}\n";
    }
}

输出:

my embed code number 
my embed code number 1
my embed code number 20

你可以在这里测试一下

http://sandbox.onlinephpfunctions.com/code/1d4ed1d7505a43b5a06b5ef6ef83468b20b47799

对于regx

  • test字面上匹配test
  • ([0-9]*) - 捕获组,匹配0-9无次或多次
  • \.字面上匹配.
  • com字面上匹配com

需要注意的一点是,将*置于捕获组([0-9])*之外将匹配并传递if,但不会捕获捕获组内的任何内容。这是有道理的,但重要的是要注意,因为你会得到这样的信息:

  

注意:未定义的偏移量: [...] 中的行 6

代表test.com

如果您想匹配embed-中的号码,您可以使用其中一个

     '/test\.com\/embed-([0-9]{3})\.html/'
     '/\/embed-([0-9]{3})\.html/'
     '/\/embed-([0-9]{3})\./'

根据您的具体情况而定。您可以在此页面上使用不同的Regx。

https://regex101.com/r/snuqRc/1

正则表达式非常强大,它们用于模式匹配,这是您需要的。

干杯。