我有两张桌子。一个有很多数字。然后,我有另一个表格,其中包含前缀列表(30,000+)。
我需要遍历前缀,看看表1中的任何数字是否都以任何前缀开头。
这是我到目前为止所做的。
$tdata = $r->get_t_data(); //array of prefix
/*
Array
(
[0] => Array
(
[prefix] => 101
[dest] => UK
)
)
*/
$cdata = $r->get_c_data(); //array of number
/*Array
(
[0] => Array
(
[row] => 1
[num] => 441143610120
)
)*/
$temp = array();
$i=0;
$time=0;
foreach ($cdata as $ckey => $c) {
foreach ($tdata as $tkey => $t) {
$length = strlen($t['prefix']);
if (strpos($c['num'], $t['prefix'], 0, $length )) {
$temp[$i]['row']=$c['row'];
$temp[$i]['prefix']=$t['prefix'];
$temp[$i]['dialled']=$c['num'];
$temp[$i]['dest']=$t['dest'];
break;
$i++; //increment only if found
}
}
$time++;
}
所以基本上它遍历数字,然后我尝试将数字的第一部分与前缀匹配。
目前正在返回并清空阵列。
希望你能帮忙
答案 0 :(得分:1)
你的条件if (strpos($c['num'], $t['prefix'], 0, $length ))
可以返回0,php会将其解释为false。 strpos应该像这样检查:
if (false !== strpos($c['num'], $t['prefix'], 0, $length )) {}
答案 1 :(得分:1)
最好的办法是在你的SQL中进行连接而不是在PHP中进行检查。要进行类似的联接,您可以这样做:
SELECT * FROM table t JOIN prefixTable p ON t.num LIKE CONCAT(p.prefix, '%')
密钥是LIKE CONCAT(p.prefix, '%')
,它说的是t.num
与prefix%
类似的表格,而%
中的t.num
是一个通配符,因为我们没有放入外卡前面意味着{{1}}列必须以前缀
答案 2 :(得分:0)
使用preg_grep减少您拥有的循环/搜索代码量:
foreach ($table1 as $search) {
$safe_search = preg_quote($search);
$matches = preg_grep("/^$safe_search/", $prefix_array);
if (count($matches) > 0) {
echo "Found $search in the prefix array\n";
}
}