PHP \ MySQL比较每行和每行的字符

时间:2014-12-09 23:25:42

标签: php mysql

我遇到了问题。我有一个带数字的数据库。

    [1] 11122111
    [2] 11133111
    [3] 11144111
    [4] 11156111

    [5] 11133789
    [6] 11133987

    [7] 45634111
    [8] 09274111

我想将它们与前4-5个字符进行比较,如果匹配的结果显示它。例如,[1] 11122111,[2] 11133111,[3] 11144111和[4] 11156111显示结果111-xx-xxx。至[5] 11133789和[6] 11133987结果111-33-xxx。 我已经尝试了很多,但尚未收到预期的结果。

我意识到这个问题没有得到妥善解决。感谢您的答案,获得了理想的解决方案。 结果如下:

$phptrn = array();
foreach($patresult as $ptrn) {
$phptrn[] = substr($ptrn['phone'], 0, 4).'****';
$phptrn[] = substr($ptrn['phone'], 0, 5).'***';
}
$phptrn = array_unique($phptrn);
foreach($phptrn as $phpat){.....

2 个答案:

答案 0 :(得分:2)

我怀疑你是否真的尝试过这一点,但这并不难找到......

$find = '11133';

$d = [
    '11122111',
    '11133111',
    '11144111',
    '11156111',
    '11133789',
    '11133987',
    '45634111',
    '09274111'
];

foreach($d as $item){
    if(strpos($item, $find)!==FALSE){
        echo $item ."<br />";
    }
}

只需向$find提供您要搜索的字符即可。或者,您可以使用substr($STRING, 0, 4);来获取所选字符串的前5个字母。

答案 1 :(得分:2)

这是解决此问题的SQL方法。 http://sqlfiddle.com/#!2/9b9641/9/0

它使用8 ... 1的整数表,计算前缀,然后计算相同的前缀。

这是查询。连接表是整数。

select n, Rpad(left(val, n),8,'X') AS prefix, count(*) as count
  from t
  join (SELECT 8 AS n UNION ALL 
        SELECT 7 UNION ALL 
        SELECT 6 UNION ALL
        SELECT 5 UNION ALL
        SELECT 4 UNION ALL
        SELECT 3 UNION ALL
        SELECT 2 UNION ALL
        SELECT 1)
      AS n
   GROUP BY N, Rpad(left(val, n),8,'X')
 HAVING COUNT(*) > 1
 ORDER BY COUNT(*) DESC, n DESC

这是结果集。我认为这是你正在寻找的那种东西。无论如何,它应该让你开始。

| N |   PREFIX | COUNT |
|---|----------|-------|
| 3 | 111XXXXX |     6 |
| 2 | 11XXXXXX |     6 |
| 1 | 1XXXXXXX |     6 |
| 5 | 11133XXX |     3 |
| 4 | 1113XXXX |     3 |