【问题标题】:Check value within range or not php检查范围内的值或不在php
【发布时间】:2014-06-20 16:32:25
【问题描述】:

我想检查范围内的值,或者不假设我是否有范围D1 to D40,如果我输入D20,那么它会返回范围内的值。

我检查了几个解决方案,但这仅适用于整数,不适用于字符串和整数。

编辑

范围将是动态的,例如 AA20 to AA30 or like AC10D to AC30D

【问题讨论】:

  • 如何删除字符串并仅使用整数来检查它是否在范围内,然后在完成后将字符串放回整数
  • 您能否更具体地说明您的值是什么格式,以及您认为“范围内”是什么?您如何解释字符串值? B5 在 A0 到 C9 的范围内吗?甚至有不同字符的值吗?
  • 将 D 替换为任意数字。请添加一些您尝试过的解决方案。开箱即用,这应该非常简单。
  • @Joost 是的,假设我的范围是 A1 到 A30,如果我输入 B20,那么它返回不在范围内,只有在 A1 到 A30 范围内才会返回
  • 但是你会在字符不相等的地方进行测试吗? IE。测试 B5 是否在 A1 到 C7 中?还是 A1 到 C4?

标签: php arrays function output


【解决方案1】:

你可以像这样写一些更简单的东西......

$arr = range(1,40); //<--- Creating a range of 1 to 40 elements..
array_walk($arr,function (&$v){ $v = 'D'.$v;}); //<--- Concatenating D to all the elements..
echo in_array('D20',$arr) ? 'Found' : 'Not Found'; //<-- The search part.

Demonstration

【讨论】:

    【解决方案2】:

    首先,您应该从字符串变量中删除字母 D,如下所示:

    // This is your first variable:
    $rang1="D5";
    
    // This is your second rang variable:
    $rang2="D20";
    
    $rang1=str_replace("D","",$rang1);
    $rang2=str_replace("D","",$rang2);
    $rang=$rang2-$rang1;
    echo $rang;
    

    或者如果您的变量如下所示:

    $rang="D5 TO D20";
    

    您可以使用以下内容:

    $rang="D5 TO D20";
    $rang=explode(" TO ",$rang);
    $rang1=rang[0];
    $rang2=rang[1];
    
    $rang1=str_replace("D","",$rang1);
    $rang2=str_replace("D","",$rang2);
    $rang=$rang2-$rang1;
    echo $rang;
    

    【讨论】:

      【解决方案3】:
      // 1. build up array of valid entries
      $prefix = "D";
      $rangeArray = array();
      for($i = 1; $i <= 40; $i++) {
          $rangeArray[] = $prefix . $i;
      }
      
      ...
      
      // 2. check against that array:
      $inRange = in_array($needle, $rangeArray); // boolean
      

      获取范围内的位置:

      $pos = array_search($needle, $rangeArray); // integer or false if not found
      

      $needle 将是您的输入值。

      【讨论】:

        【解决方案4】:

        以下代码适用于开头不同字母的范围,例如 A10B30 (假设 A20 在该范围内,但 A40 不在)

        $min = "A10";
        $max = "B30";
        $test = "A20";
        
        $min_ascii = chr($min[0]);
        $max_ascii = chr($max[0]);
        $test_ascii = chr($max[0]);
        
        $min_number = substr($min, 1);
        $max_number = substr($max, 1);
        $test_number = substr($test, 1);
        
        if ($min_ascii <= $test_ascii and $test_ascii <= $max_ascii
            and $min_number <= $test_number and $test_number <= $max_number)
        {
            echo "$test is in the range from $min to $max";
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多