php多维数组' s

时间:2016-02-02 18:45:13

标签: php mysql arrays

我从包含这些字段的表中提取数据:

zipcode,city,state,county

我的问题是有些邮政编码在多个城市,有些城市有多个邮政编码......所以有办法将所有数据放入数组,然后按顺序对所有邮政编码进行分组,然后构建一个表,以便它们按顺序排列,但如果数据是多余的,比如zip,city,state和county已经在数组中,那么它会跳过它吗?

然后我可以使用echo将它打印到浏览器中,进入如下表:

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;
}

但我不确定这是否是正确的做法。

然后,一旦我构建了数组,我该如何构建表?

1 个答案:

答案 0 :(得分: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>";
    }
}