我遇到了问题。我有一个带数字的数据库。
[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){.....
答案 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 |