Php 在给定手机号码的同一位置至少匹配5个号码位置

Php 在给定手机号码的同一位置至少匹配5个号码位置,php,mysql,regex,Php,Mysql,Regex,鉴于我有以下电话号码: 9904773779 我想在我的数据库中搜索与上述号码至少有5位数相同的其他电话号码,例如: 9933723989 9403793378 我的第一个想法是使用如下查询: select mobileno from tbl_registration where mobileno like '%MyTextBox Value%' 但是,这不起作用。我想我会使用PHP,虽然不是很整洁,可能还有更好的方法 <?php $strOne = '9904773779'; $str

鉴于我有以下电话号码:

9904773779 我想在我的数据库中搜索与上述号码至少有5位数相同的其他电话号码,例如:

9933723989 9403793378 我的第一个想法是使用如下查询:

select mobileno from tbl_registration where mobileno like '%MyTextBox Value%'

但是,这不起作用。

我想我会使用PHP,虽然不是很整洁,可能还有更好的方法

<?php
$strOne = '9904773779';
$strTwo = '9933723989';
$arrOne = str_split($strOne);
$arrTwo = str_split($strTwo);
$arrIntersection = array_intersect($arrOne,$arrTwo);
$count=0;
foreach ($arrIntersection as $key => $value) {
  if ($arrOne[$key] === $arrTwo[$key]) {
    $count++;
  }
}
print_r($count);
?>
在第一阶段,我将字符串拆分为数组。然后我使用array_intersect来识别重复的值并将它们保存到数组中。这样就不必在每个数字之间循环。然后我循环遍历相同值的数组,并比较两个数组以查看值是否相同


不过,我确实希望得到一个更酷的答案。

我想我会选择PHP,尽管不是很整洁,可能还有更好的方法

<?php
$strOne = '9904773779';
$strTwo = '9933723989';
$arrOne = str_split($strOne);
$arrTwo = str_split($strTwo);
$arrIntersection = array_intersect($arrOne,$arrTwo);
$count=0;
foreach ($arrIntersection as $key => $value) {
  if ($arrOne[$key] === $arrTwo[$key]) {
    $count++;
  }
}
print_r($count);
?>
在第一阶段,我将字符串拆分为数组。然后我使用array_intersect来识别重复的值并将它们保存到数组中。这样就不必在每个数字之间循环。然后我循环遍历相同值的数组,并比较两个数组以查看值是否相同


不过,我确实希望得到一个更酷的答案。

我认为这里有一个更整洁的PHP解决方案,它使用:

这将计算两个字符串之间的相似性

示例演示:

$numbers = array("1234567890", "9933723989", "9403793378");
$key = "9904773779";
foreach ($numbers as $k) {           
  if (similar_text($key, $k) >= 5) { // There must be 5+ similarities
    echo $k . PHP_EOL;  
  }
}
输出:[99337239899403793378]


请参见

我认为更整洁的PHP解决方案是:

这将计算两个字符串之间的相似性

示例演示:

$numbers = array("1234567890", "9933723989", "9403793378");
$key = "9904773779";
foreach ($numbers as $k) {           
  if (similar_text($key, $k) >= 5) { // There must be 5+ similarities
    echo $k . PHP_EOL;  
  }
}
输出:[99337239899403793378]


请参见

我尝试过使用类似mysql的select mobileno from tbl_registration,其中mobileno类似于“%MyTextBox Value%”这听起来像是您想做一些与计算非常类似的事情。这是你想要的吗?应该注意的是,PHP在标准库中。我不知道Levenshtein distance,我想我的问题很容易理解。你想要什么样的解决方案,PHP解决方案还是MySQL解决方案?IMHO regex不是可行的解决方案。我也无法想象一个纯粹的MySQL解决方案,但我很惊讶。我会选择纯PHP解决方案:创建一个比较两个字符串的函数,一个比较每个数字的简单循环,并保留一个小计数器。我曾尝试使用类似于mysql的select mobileno(来自tbl_注册),其中mobileno类似于“%MyTextBox Value%”。这听起来像是您想做一些与计算非常类似的事情。这是你想要的吗?应该注意的是,PHP在标准库中。我不知道Levenshtein distance,我想我的问题很容易理解。你想要什么样的解决方案,PHP解决方案还是MySQL解决方案?IMHO regex不是可行的解决方案。我也无法想象一个纯粹的MySQL解决方案,但我很惊讶。我会选择纯PHP解决方案:创建一个比较两个字符串的函数,一个比较每个数字的简单循环,并保留一个小计数器。我将类似的文本与我的示例和levenshtein进行了比较,它肯定是最快的。回显类似的文本123456712345;=5-我以为OP希望匹配的数字在相同的列中。类似的文本肯定是它。我将类似的文本与我的示例和levenshtein进行了比较,它肯定是最快的。回显类似的文本123456712345;=5-我以为OP希望匹配的数字在同一列中。