尝试找到末尾有数字序列的字符串时,是strpos还是preg_match?

时间:2018-08-11 10:58:32

标签: php if-statement preg-match strpos

当当前URL中有一个可以部分工作但返回一些不必要结果的字符串时,我正在尝试创建IF语句。

// set patterns active
if ( $option == 'pattern' ) {
$patternvalue = "pattern=" . $v['id'];
$optionset = strpos($_SERVER['REQUEST_URI'], $patternvalue);
if ($optionset !== false) {
echo ' class="active" ';
}
}

如果pattern = 16,则使用上面的代码,那么该代码将回显class =“ active”(对于pattern = 16,但也对pattern = 1)……似乎只匹配第一个数字。

我不知道我是否应该使用preg_match,但是我是一个完全新手,也不知道如何使它与所需的所有正斜杠一起使用。

典型的网址结尾可能类似于:/?action = search&pattern = 23&fabric = 13&type = 2

1 个答案:

答案 0 :(得分:2)

您可以这样做。

$url = "https://www.example.com/index.php?test1=1&test2=2&test3=3&test4=1";

$parse = parse_url($url);
print_r($parse);
/*
print_r($parse); output (array):
    Array
    (
        [scheme] => https
        [host] => www.example.com
        [path] => /index.php
        [query] => test1=1&test2=2&test3=3&test4=1
    )
*/
parse_str($parse['query'], $query);
print_r($query);
/*
print_r($query); output (array):
Array
(
    [test1] => 1
    [test2] => 2
    [test3] => 3
    [test4] => 1
)
*/

// Version 1 - ?test1=1
if($query["test1"] == 1){
    echo 'class="active1"'."\n"; /* output: class="active1" */
}

// Version 2 - ?test1=1&test2=2
if($query["test1"] == 1 && $query["test2"] == 2){
    echo 'class="active2"'."\n"; /* output: class="active2" */
}

// Version 3 ?test1=1  <<and>> $option list control.
$options = array("a","b","c");
if($query["test1"] == 1 && in_array("a", $options)){
    echo 'class="active3"'."\n"; /* output: class="active3" */
}

// Version 4 &test3=3 <<< value control.
if(in_array("3", $query)){
    echo 'class="active4"'."\n"; /* output: class="active4" */
}

// Version 5 ?test1  <<< test1 query >>> found in url
if(array_key_exists("test1",$query)){
    echo 'class="active5"'."\n"; /* output: class="active5" */
}

// Version 6 - ?ASDASDASD=  <<< not found.
if(array_key_exists("ASDASDASD",$query)){
    echo 'class="active6"'."\n"; /* not printed */
}

// Version 7 - advanced conditions
if($query["test1"] == 1){
    if($query["test2"] == 2){
        echo 'class="active7"'."\n"; /* output: class="active7" */
    }
}else{
    if($query["test3"] == 2){
        echo 'class="active8"'."\n"; /* not printed */
    }
}

// Version 9 -- multiple and advanced conditions
if(!empty($query["test1"]) && $query["test2"] == 2){

    echo 'class="active9"'."\n"; /* output: class="active9" */

}else if(empty($query["test2"]) && $query["test3"] == 3){

    echo 'class="active10"'."\n"; /* not printed */

}else{

    echo 'class="active11"'."\n"; /* not printed */

}

dynamic reconfigure parameters-parse_url()

编辑:各种示例。

{{1}}