php 如何在数据库中搜索相似的号码?

uttx8gqw  于 2023-02-15  发布在  PHP
关注(0)|答案(2)|浏览(177)

在数据库(mysql/php代码)中搜索以下条目的方法是什么:

  • 小行星123XX
  • 123 XY
  • 湘珠44
  • 1X344
  • 小行星1Z344
  • 直23YY
  • 输入的字母只有X-Y-Z和0到9的数字

它们都是一个数字,即(12344),那么我如何显示这些结果呢?目标是搜索重复的条目。

    • 另一个示例:**

12年
X = 3、4、5、6、7、8、9、0
Y = 3、4、5、6、7、8、9、0

  • 但y不等于x或任何表观数(1,2)*
  • 且X不等于Y或任何表观数(1,2)*
$number = "1XZYY";
$rnumber = str_replace(array('Y','X','Z'), "ـ", $number);
$lenNumber = strlen(5);
$duplicate = $mysqli->query("SELECT `number` FROM `listNumber` WHERE (length(`number`) = '$lenNumber' && `number` LIKE '%$rnumber%') OR (length(`number`) = '$lenNumber' && `number`LIKE '%$rnumber%')");

我尝试了许多方法,但是显示结果的速度非常慢,因为我将循环放在循环中,以搜索第一个循环中的每个数字

lymnna71

lymnna711#

我知道您想查找12344,但是XYZ中的一些数字可能被修改并替换为随机的大写字母,为此,您可以使用正则表达式:

WHERE REGEXP_LIKE(foo, '^[XYZ1][XYZ2][XYZ3][XYZ4][XYZ4]$')

Demo

htzpubme

htzpubme2#

我会用PHP把每一个数字放到正确的位置,直到我发现冲突为止。为了防止双循环,我使用字典助手对象来保存X,Y和Z的值。

function match_str_to_number($str, $number)
{
    if (strlen($number) != strlen($str)) {
        return false;
    }

    $dict = ['X' => -1, 'Y' => -1, 'Z' => -1];
    for ($i = 0; $i < strlen($number); $i++) {
        if ($number[$i] != $str[$i]) {

            // a number mismatch
            if (!isset($dict[$str[$i]])) {
                return false;
            }

            // a wildcard variable conflict
            if ($dict[$str[$i]] != $number[$i] && $dict[$str[$i]] != -1) {
                return false;
            };

            $dict[$str[$i]] = $number[$i];
        }
    }

    return true;
}

echo match_str_to_number("XYZ44", "12344") ? "true" : "false";
echo match_str_to_number("XYZ4X", "12344") ? "true" : "false";

// output: truefalse

相关问题