2017-10-05 58 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);