php多维数组的

php多维数组的,php,mysql,arrays,Php,Mysql,Arrays,我正在从包含以下字段的表中提取数据: zipcode,city,state,county 我的问题是,一些邮政编码位于多个城市,而一些城市位于多个邮政编码中。。。那么,有没有一种方法可以将所有数据放入一个数组中,然后将所有邮政编码按顺序分组,然后在此基础上构建一个表,以便将它们按顺序排列,但是如果数据是冗余的,例如邮政编码、市、州和县已经在数组中,那么它会跳过它 然后我可以使用echo将其打印到浏览器中,并将其打印到如下表格中: 74801 | Shawnee, Oklahoma | Pott

我正在从包含以下字段的表中提取数据:

zipcode,city,state,county
我的问题是,一些邮政编码位于多个城市,而一些城市位于多个邮政编码中。。。那么,有没有一种方法可以将所有数据放入一个数组中,然后将所有邮政编码按顺序分组,然后在此基础上构建一个表,以便将它们按顺序排列,但是如果数据是冗余的,例如邮政编码、市、州和县已经在数组中,那么它会跳过它

然后我可以使用echo将其打印到浏览器中,并将其打印到如下表格中:

74801 | Shawnee, Oklahoma | Pottawatomie
74801 | Bethel, Oklahoma | Pottawatomie
74801 | Johnson, Oklahoma | Pottawatomie
74851 | McLoud, Oklahoma | Pottawatomie
74851 | Dale, Oklahoma | Pottawatomie
$zipArray = array();
$zipCode = $dbhhandle->zip;
$cityName = $dbhhandle->city;
$countyName = $dbhhandle->county;
if($zipArray[$zipCode][$cityName] != $countyName) {
   $zipArray[$zipCode][$cityName] = $countyName;
}
等等。 但在这些情况下:

74015 | CATOOSA, Oklahoma | Rogers
74015 | COTOOSA, Oklahoma | Rogers
因为这些字段中的重复项不在表的其余部分,所以我需要它跳过显示两次

我认为是这样的:

74801 | Shawnee, Oklahoma | Pottawatomie
74801 | Bethel, Oklahoma | Pottawatomie
74801 | Johnson, Oklahoma | Pottawatomie
74851 | McLoud, Oklahoma | Pottawatomie
74851 | Dale, Oklahoma | Pottawatomie
$zipArray = array();
$zipCode = $dbhhandle->zip;
$cityName = $dbhhandle->city;
$countyName = $dbhhandle->county;
if($zipArray[$zipCode][$cityName] != $countyName) {
   $zipArray[$zipCode][$cityName] = $countyName;
}
但我不确定这样做是否正确


那么,一旦构建了数组,如何构建表呢?

您的代码看起来非常接近,但缺少状态。因此,将数组的元素更改为具有state和country元素的关联数组

此外,在检查邮政编码是否重复之前,您需要检查邮政编码是否存在条目,否则您将访问未定义的索引

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

您的代码看起来很接近,但缺少状态。因此,将数组的元素更改为具有state和country元素的关联数组

此外,在检查邮政编码是否重复之前,您需要检查邮政编码是否存在条目,否则您将访问未定义的索引

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

它更多的是关于您的查询,而不是关于您的服务器端代码;消除重复项,您就不必在那里处理它们。一种可能的方法是按zipcode、city、state、country从表组中选择zipcode、city、state、country。我无法消除重复项,因为还有其他字段是唯一的。。。但我只显示了邮政编码、城市、州和县,不像美国,更像是城市所在的县,但如果只显示这些字段,为什么还要查询其他内容?因为查询是针对在他们所在地区找工作的人,我向他们展示了他们所在地区的可用区域,并使用lat/long从他们的邮政编码中拉出100英里半径。。。但我也使用同样的表格来处理客户和其他事情。我得到的所有75k+记录的数据文件中有一些在邮政编码、城市、州中相同的记录。。。但其他领域则不然。我写了一些代码,得到了邮政编码,去了一个网站找到了这个县,然后在数据库中更新了这个县。所以,我不想删除任何数据,以防我删除一些我需要的唯一的数据,这就是数据规范化。将列的id提取到一个单独的数组中,并为每个列指定一个唯一的id city_代码。在原始表中,将这四列替换为对city_codes数组的引用;消除重复项,您就不必在那里处理它们。一种可能的方法是按zipcode、city、state、country从表组中选择zipcode、city、state、country。我无法消除重复项,因为还有其他字段是唯一的。。。但我只显示了邮政编码、城市、州和县,不像美国,更像是城市所在的县,但如果只显示这些字段,为什么还要查询其他内容?因为查询是针对在他们所在地区找工作的人,我向他们展示了他们所在地区的可用区域,并使用lat/long从他们的邮政编码中拉出100英里半径。。。但我也使用同样的表格来处理客户和其他事情。我得到的所有75k+记录的数据文件中有一些在邮政编码、城市、州中相同的记录。。。但其他领域则不然。我写了一些代码,得到了邮政编码,去了一个网站找到了这个县,然后在数据库中更新了这个县。所以,我不想删除任何数据,以防我删除一些我需要的唯一的数据,这就是数据规范化。将列的id提取到一个单独的数组中,并为每个列指定一个唯一的id city_代码。在原始表中,将这四列替换为对city_codes数组的引用。