2016-02-02 66 views
1

我拉出來的數據具有這些字段的表的:PHP多維數組的

zipcode,city,state,county 

我的問題是,有些郵政編碼在多個城市,一些城市在多個郵政編碼...那麼是否有辦法將所有數據放入數組中,然後按順序對所有的郵政編碼進行分組,然後從中創建一個表,以便它們按順序排列,但如果數據是多餘的,如郵編,城市,州和縣已經在陣列中,然後跳過它?

所以然後我可以將其打印到使用回波瀏覽器中,向一個表是這樣的:

74801 | Shawnee, Oklahoma | Pottawatomie 
74801 | Bethel, Oklahoma | Pottawatomie 
74801 | Johnson, Oklahoma | Pottawatomie 
74851 | McLoud, Oklahoma | Pottawatomie 
74851 | Dale, Oklahoma | Pottawatomie 

等 但是在這些情況下:

74015 | CATOOSA, Oklahoma | Rogers 
74015 | COTOOSA, Oklahoma | Rogers 

由於這些是重複在這些領域(不在表格的其餘部分),我需要它跳過兩次。

我覺得是這樣的:

$zipArray = array(); 
$zipCode = $dbhhandle->zip; 
$cityName = $dbhhandle->city; 
$countyName = $dbhhandle->county; 
if($zipArray[$zipCode][$cityName] != $countyName) { 
    $zipArray[$zipCode][$cityName] = $countyName; 
} 

,但我不知道這是做正確的方式。

然後,一旦我建立了數組,我該如何構建表?

+0

這更多關於您的查詢而不是關於您的服務器端代碼;消除重複,你不必在那裏處理它們。一種可能的方法是選擇郵政編碼,城市,州,國家從表GROUP BY郵編,城市,州,國家。 – raina77ow

+0

我不能消除重複,因爲還有其他字段是唯一的......但我只顯示郵政編碼,城市,州和縣(不是像美國這樣的國家,更像是該城市所在的縣) –

+0

但是,如果你只顯示這些字段,爲什麼要查詢別的東西? – raina77ow

回答

0

你的代碼看起來很接近,但它缺少狀態。因此,將數組的元素更改爲與關聯數組statecounty元素。

此外,在檢查是否重複之前,您需要檢查是否有郵政編碼條目,否則您將訪問未定義的索引。

$zipArray = array(); 
$zipCode = $dbhhandle->zip; 
$cityName = $dbhhandle->city; 
$countyName = $dbhhandle->county; 
$stateName = $dbhandle->state; 
if(!isset($zipArray[$zipCode][$cityName]) || $zipArray[$zipCode][$cityName]['county'] != $countyName) { 
    $zipArray[$zipCode][$cityName] = array('county' => $countyName, 'state' => $stateName); 
} 

要顯示錶格,請使用嵌套循環。

foreach ($zipArray as $zip => $cities) { 
    foreach ($cities as $city => $cityData) { 
     echo "<tr><td>$zip</td><td>$city, {$cityData['state']}</td><td>{$cityData['county']}</td></tr>"; 
    } 
}