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 中按月提取的日期和订单数

如何从 PHP 中的多维关联数组中删除项目

如何在PHP中按值对对象数组进行排序

在 PHP 中按整数键对对象进行排序

如何将 latin1 字符集关联数组从 php 传递到 javascript?

php 从关联数组数组创建数组