Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php合并编号(邮政编码)_Php_Zipcode - Fatal编程技术网

Php合并编号(邮政编码)

Php合并编号(邮政编码),php,zipcode,Php,Zipcode,我有一个php数组,其中包含从db查询返回的zipcodes。邮政编码为德语格式,因此长度为5位数 例如: array ('90475', '90419', '90425', '90415', '90429', '90479', '90485'); 我想用占位符将值合并为“范围”,如: array ('90...', '904..', '9041.', '9042', '9047.'); //90485 is left out because there is only 1 match.

我有一个php数组,其中包含从db查询返回的zipcodes。邮政编码为德语格式,因此长度为5位数

例如:

array ('90475', '90419', '90425', '90415', '90429', '90479', '90485');
我想用占位符将值合并为“范围”,如:

 array ('90...', '904..', '9041.', '9042', '9047.');
 //90485 is left out because there is only 1 match. 
编辑/逻辑: 这是用于自动建议搜索。尝试构建一个树,以便用户可以搜索与任何以90或904开头的zipcode匹配的条目,等等。。为了使自动完成更有意义,我只想在至少有两个匹配项(示例中为90419和90415)的情况下提供“9041.”值。Zipcode的长度始终为5位,从00000到99999

非常感谢您的帮助。 谢谢

给你:

$length = 5;

$zip = array('90475', '90419', '90425', '90415', '90429', '90479', '90485');

$result = array();

for ($i = 2; $i <= $length - 1; $i++) {
    $pass = array();

    foreach ($zip as $val) {
        $pass[substr($val, 0, $i)]++;
    }

    foreach ($pass as $key => $val) {
        if ($val > 1) {
            $result[] = $key.str_repeat('.', $length - $i);
        }
    }
}

sort($result);

var_dump($result);
$length=5;
$zip=array('90475','90419','90425','90415','90429','90479','90485');
$result=array();
对于($i=2;$i$val){
如果($val>1){
$result[]=$key.str_repeat('.',$length-$i);
}
}
}
排序($result);
var_dump($结果);
这将在$result中返回一个数组:

数组('90…'、'904..、'9041'、'9042'、'9047')

每个仅使用一次的范围将被忽略,并且不会在$result数组中返回。

$myArray=array('90475','90419','90425','90415','90429','90479','90485');
$myArray = array ('90475', '90419', '90425', '90415', '90429', '90479', '90485');

$consolidate = array();
foreach($myArray as $zip) {
    for ($c = 2; $c < 5; ++$c) {
        $key = substr($zip, 0, $c) . str_repeat('.',5 - $c);
        $consolidate[$key] = (isset($consolidate[$key])) ? $consolidate[$key] + 1 : 1;
   }
}

$consolidate = array_filter(
    $consolidate,
    function ($value) {
        return $value > 1;
    }
);
var_dump($consolidate);
$consolid=array(); foreach($myArray作为$zip){ 对于($c=2;$c<5;++$c){ $key=substr($zip,0,$c).stru重复('.',5-$c); $consolidate[$key]=(isset($consolidate[$key])?$consolidate[$key]+1:1; } } $consolidate=数组\过滤器( 美元合并, 函数($value){ 返回$value>1; } ); var_dump(合并美元);
请详细说明逻辑?您能更清楚地解释一下吗@USER1254574感谢您的回复,刚刚更新。您可以根据需要实时筛选它们,无需创建这样的占位符[对于如此少量的数据,即使它们可能是1000或10000]。1)初始数组是否已排序?2) 您的示例结果与树不同,如
array('90…',array('904..',array('9041','9042','9047')将是一个例子。感谢Legionar,它工作得很好,但是任何没有第二个匹配项的zipcode都将在数组中。马克:答案是正确的。现在检查一下,我以前已经修好了。现在它在$pass[substr($val,0,$I)]++上坏了;未定义索引:91这只是PHP中的注意事项,而不是错误。您可以将其更改为$pass[substr($val,0,$i)]=isset($pass[substr($val,0,$i)])$通过[substr($val,0,$i)]+1:1;