2017-10-05 23 views
-3

无法让我的头脑简单的方法来做到这一点。我为某些图形数据创建API的终点,并需要创建一个包含标签数组和响应值的另一个数组的响应。PHP通过4个字母组合邮编的邮政编码PHP

我已经有邮政编码的阵列,我想做的事我能有包含由前4个字符与所有组的邮政编码的一个子阵列分组,以便我可以邮政编码的新数组计算值的数组长度。

E.g.输出:

$postcodes = ['SO30 0NG', 'SO30 OTD', 'SO31 1TG', 'RG51 5HG', 'RG51 7GH'] 

$grouped = [ 
    'SO30' = [ 
     'SO30', 'SO30' 
    ], 
    'SO31' = [ 
     'SO31'   
    ], 
    'RG51' = [ 
     'RG51', 'RG51'   
    ] 
] 

我第一次尝试是:

但这似乎创建重复键。

+0

你确定这就是你想要'$ grouped'看?它不应该是子数组中的完整邮编,而不仅仅是前缀?您目前的代码现在生成一个与'$ grouped'完全相同的数组:https://eval.in/874249 – iainn

+0

复制哪些密钥?如果你只想计算这四个字母前缀出现的次数,那么你可以多次将相同的值放入数组中,而不是只增加一个计数器变量? – CBroe

+0

你使用字符串修剪cleanpostcode四个字符..尝试做一个独立的变量 – Dale

回答

0
foreach ($postcode as $pc) { 
    $cleanPostcode = str_replace(" ", "", $pc); 
    $cleanPostcodeShort = substr($cleanPostcode, 0, 4); 
    $data[$cleanPostcodeShort][] = $cleanPostcode; 
} 
0

这工作。

$postcodes = ['SO30 0NG', 'SO30 OTD', 'SO31 1TG', 'RG51 5HG', 'RG51 7GH']; 

$result= array(); 
Foreach ($postcodes as $postcode){ 
    $short =Substr($postcode,0,4); 
    // If subarray does not exist 
    If(!isset($result[$short])) $result[$short]=[]; //create subarray of short in result 

    $result[$short][]= $short; // add item in subarray 
} 

Var_dump($result); 

https://3v4l.org/YG08d

0

这将解决你的问题

$postcodes = ['SO30 0NG', 'SO30 OTD', 'SO31 1TG', 'RG51 5HG', 'RG51 7GH']; 
$grouped = []; 
foreach ($postcodes as $pc) { 
    $group = explode(" ", $pc); 
    $grouped[$group[0]][] = $group[1]; 
} 

var_dump($grouped) 
0
<?php 

$postcodes = ['SO30 0NG', 'SO30 OTD', 'SO31 1TG', 'RG51 5HG', 'RG51 7GH']; 

$output = []; 

foreach($postcodes as $postcode) 
{ 
    $splitPostcode = explode(' ', $postcode); 

    if(!array_key_exists($splitPostcode[0], $output)) 
    { 
     $output[$splitPostcode[0]] = []; 
    } 

    $output[$splitPostcode[0]][] = $splitPostcode[0]; 
} 

var_dump($output);