PHP - 从数据库构建多级关联数组(从数据库中按州对城市进行排序)
Posted
技术标签:
【中文标题】PHP - 从数据库构建多级关联数组(从数据库中按州对城市进行排序)【英文标题】:PHP - build multilevel associative array from database (sorting cities by state from db) 【发布时间】:2011-10-18 18:42:24 【问题描述】:我对 php 有点陌生,在过去的几个小时里,我一直在想办法解决这个问题。我需要从数据库中按州对城市进行排序。我使用以下查询来检索数据集:
SELECT state, city FROM table ORDER BY state ASC, city ASC
当我在 phpMyAdmin 中将其作为查询运行时,这向我显示了我需要的信息,但是我似乎无法弄清楚如何将它放入数组并循环它。
我需要输出的格式是
CA
Los Angeles
San Francisco
New York
***lyn
Buffalo
我还需要能够让每个城市返回一个链接,但我很确定我可以使用“.item['$city']”来做到这一点。
非常感谢任何帮助!
【问题讨论】:
【参考方案1】:谢谢各位!
最终使用以下代码:
$query = ('SELECT DISTINCT state,city FROM table ORDER BY state ASC, city ASC');
$result = mysql_query($query);
$states = array();
while ($row = mysql_fetch_assoc($result))
if (!isset($exists[$row['state']]))
echo "<div id='location'><div class='state'><p>" . $row['state'] . "</p>";
$exists[$row['state']] = true;
echo "<div class='city'><p><a href='?city=".$row['city']."' target='_blank'>".$row['city']."</a></p></div>";
【讨论】:
【参考方案2】:结果已经排序,这应该可以工作:
$output = array();
foreach ($input as $value)
if (array_key_exists($value['state'], $output) !== true)
$output[$value['state']] = array();
$output[$value['state']][] = $value['city'];
print_r($output);
输入:
$input = array
(
0 => array
(
'state' => 'CA',
'city' => 'Los Angeles',
),
1 => array
(
'state' => 'CA',
'city' => 'San Francisco',
),
2 => array
(
'state' => 'New York',
'city' => '***lyn',
),
3 => array
(
'state' => 'New York',
'city' => 'Buffalo',
),
);
输出 (@ CodePad):
Array
(
[CA] => Array
(
[0] => Los Angeles
[1] => San Francisco
)
[New York] => Array
(
[0] => ***lyn
[1] => Buffalo
)
)
【讨论】:
【参考方案3】:类似...
<?php
$result = mysql_query("SELECT state,city FROM table ORDER BY state ASC, city ASC");
$exists = array();
while ($row = mysql_fetch_assoc($result))
if (!isset($exists[$row['state']]))
echo '<p>' . $row['state'] . '</p>';
$exists[$row['state']] = true;
echo '<p style="margin-left: 5px;">' . $row['city'] . '</p>';
?>
【讨论】:
谢谢,但该代码只是对城市进行排序,根本不显示州。 @Mike Odd。对我来说很好。 你说得对,我认为最初的问题的措辞实际上是错误的。列出了结果,但鉴于我每个城市有很多条目,它将每个条目列为一个城市,而不是只去 STATE -> CITY。【参考方案4】:MySQL 只会给你一个列表。您需要检查当前状态是否与上一个状态相同。如果是,则继续列出城市,否则,开始一个新的段,打印州和城市...
类 Java 代码:
lastState = "";
while(haveNext())
if (currentRow.state!=lastState) println(currentRow.state);
println(currentRow.city);
lastState=currentRow.state;
【讨论】:
我认为他正在寻找基于标签的PHP解决方案。以上是关于PHP - 从数据库构建多级关联数组(从数据库中按州对城市进行排序)的主要内容,如果未能解决你的问题,请参考以下文章
创建 PHP 数组,其中包含从 SQL 中按月提取的日期和订单数