【问题标题】:PHP - check if range appears in variable?PHP - 检查范围是否出现在变量中?
【发布时间】:2014-10-15 16:06:39
【问题描述】:

我有一个这样的变量:

$test = "002,003,004,005,012,032,045";

我想看看这个字符串中是否出现了某个数字范围内的任何数字。

例如:if ($test == [010-015]) echo "found";

这将检查 $test 变量中的任意数量的 010,011,012,013,014,015,如果找到,则找到回显。

我该怎么做?

我能想到的唯一方法是遍历每个数字..但必须有更好的方法!

谢谢

【问题讨论】:

  • array_intersect() 在拆分列表并使用range() 进行比较后会起作用。
  • if (!empty(array_intersect(explode(',', $test), range(10,15))))
  • 如果 $test 是一个字符串,并且绝对没有格式化,那么无论如何你都会有 O(n) 。但是,如果您的字符串已排序,其值介于 0 和 999 之间,并且始终为 3 位数字,那么您可以直接对其进行二进制搜索。

标签: php range match


【解决方案1】:

希望对你有帮助

$test = "002,003,004,005,012,032,045";
foreach (explode(',',$test) as $i)
{
  if($i > 10 && $i < 15)
  {
    echo 'found';
  }
}

【讨论】:

  • 感谢这似乎有效。任何将其转换为函数的方法,以便我可以将 2 个三位数传递给它并检查。即:010-015、037-042 等。考虑到这一点,我需要传递 2 个三位数和我希望它回显的措辞,因为它会根据数字范围而变化。
  • function test($l, $h, $sec, $test) { foreach (explode(',',$test) as $i) { if($i &gt; $l &amp;&amp; $i &lt; $h) echo $sec; } } test ("010","015", "Found", $test); 这似乎有效!
  • 以上行不通。很好,但如果范围内有两个匹配项,那么 I 2 两个 Found 回声。 3 匹配三个找到。有什么办法吗?
  • break;放在echo之后
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 2023-01-14
  • 2023-04-03
  • 2017-07-13
相关资源
最近更新 更多