0

我有以下整数

7
77
0
20

在一个数组中。我使用它们来检查呼叫的来源。
我需要做的是我需要一种方法来检查数字730010123, 772930013, 20391938. 是否以 7 或 77 开头,例如。

有没有办法做到这一点PHP并避免一千个 if 语句?
我遇到的一个问题是,如果我检查数字是否以 7 开头,那么以 77 开头的数字也会被调用。请注意,7 个号码是移动号码,77 个是共享费用号码,并且在任何方面都不相等,所以我需要将它们分开。

4

5 回答 5

0

我用一个演示数组做了一个小例子,希望你可以使用它:

$array = array(
    7 => 'Other',
    70 => 'Fryslan!',
    20 => 'New York',
    21 => 'Dublin',
    23 => 'Amsterdam',
);

$number = 70010123;

$place = null;

foreach($array as $possibleMatch => $value) {
        if (preg_match('/^' . (string)$possibleMatch . '/', (string)$number))
        $place = $value;
}

echo $place;

在这种情况下,答案是“Fryslan”。您必须记住在这种情况下 7 也匹配?因此,如果有两个匹配项,您可能需要添加一些公制系统。

于 2013-07-12T07:15:34.150 回答
0

一种方法是将作为数字接收的“整数”作为字符串处理。

这样做是这样的:

$number = 772939913;
$filter = array (
    '77' => 'type1',
    '20' => 'type2',
    '7' => 'type3',
    '0' => 'type4');
$match = null;
foreach ($filter as $key => $val){
    $comp = substr($number, 0, strlen($key));
    if ($comp == $key){
        $match = $key;
        break;
    }
}

if ($match !== null){
    echo 'the type is: ' . $filter[$match];
   //you can proceed with your task
}
于 2013-07-12T07:16:58.337 回答
0

您可以为此使用preg_matcharray_filter

function check_digit($var) {
    return preg_match("/^(7|77|0)\d+$/");
}

$array_to_be_check = array("730010123" , "772930013", "20391938");

print_r(array_filter($array_to_be_check, "check_digit"));
于 2013-07-12T07:20:01.773 回答
0
if (substr($str, 0, 1) == '7') ||{
    if (substr($str, 0, 2) == '77'){
        //starts with '77'
    } else {
        //starts with '7'
    }
}
于 2013-07-12T07:10:43.337 回答
0
Is this you want?

<?php

$myarray = array(730010123, 772930013, 20391938); 

foreach($myarray as $value){

    if(substr($value, 0, 2) == "77"){
        echo "Starting With 77: <br/>";
        echo $value;
        echo "<br>";
    }
    if((substr($value, 0, 1) == "7")&&(substr($value, 0, 2) != "77")){
        echo "Starting With 7: <br/>";
        echo $value;
        echo "<br>";
    }   
}



?>
于 2013-07-12T07:17:41.283 回答