【问题标题】:PHP Compare integersPHP比较整数
【发布时间】:2013-07-10 16:00:11
【问题描述】:

我有以下整数

7
77
0
20

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

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

【问题讨论】:

  • 所以基本上所有以 7 开头的号码都是手机号码,除了以 77 开头的号码,这使得它们共享费用?易于区分,只需将 70、71、... 79 个数字添加到您的数组中,然后将它们检测为移动。

标签: php if-statement integer compare


【解决方案1】:
if (substr($str, 0, 1) == '7') ||{
    if (substr($str, 0, 2) == '77'){
        //starts with '77'
    } else {
        //starts with '7'
    }
}

【讨论】:

  • 恐怕将其视为字符串是最快且可能是最简单的方法。事实上,我想不出别的办法,尽管这样做我会觉得有点脏。
  • @Anpan - 我一点也不觉得脏。将它们作为字符串处理实际上更干净,因为在除法后消除余数时,没有需要清理的混乱。
【解决方案2】:

我用一个demo数组做了一个小例子,希望大家可以使用:

$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 也匹配?因此,您可能需要添加一些度量系统以防两个匹配项。

【讨论】:

    【解决方案3】:
    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>";
        }   
    }
    
    
    
    ?>
    

    【讨论】:

      【解决方案4】:

      您可以为此使用 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"));
      

      【讨论】:

        【解决方案5】:

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

        这样做是这样的:

        $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
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-11
          • 1970-01-01
          • 1970-01-01
          • 2013-08-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多