2016-02-02 67 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>"; 
    } 
}