PHP - 从数据库构建多级关联数组(按状态从db排序城市)

时间:2011-08-03 03:36:26

标签: php mysql arrays sorting

我对php有些陌生,并且在过去的几个小时里一直在喋喋不休地试图解决这个问题。我需要从数据库中按州排序城市。我使用以下查询来检索数据集:

SELECT state, city FROM table ORDER BY state ASC, city ASC  

这显示了我在phpMyAdmin中作为查询运行时所需的信息,但是我似乎无法弄清楚如何将其放入数组并循环它。

我需要输出的格式是

CA
   Los Angeles
   San Francisco
New York
   Brooklyn
   Buffalo

我还需要能够让每个城市都返回一个链接,但我很确定我可以用“.item ['$ city']来做到这一点。”

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:3)

谢谢大家!

使用以下代码结束:

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

答案 1 :(得分:1)

MySQL会给你一个清单。您需要检查当前状态是否与上一个状态相同。如果是,继续列出城市,否则,开始新的细分,打印州和城市...

类似Java的代码:

lastState = "";
while(haveNext()) {
    if (currentRow.state!=lastState) println(currentRow.state);
    println(currentRow.city);
    lastState=currentRow.state;
}

答案 2 :(得分:1)

结果已经排序,这应该有效:

$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' => 'Brooklyn',
    ),

    3 => array
    (
        'state' => 'New York',
        'city' => 'Buffalo',
    ),
);

输出(@ CodePad):

Array
(
    [CA] => Array
        (
            [0] => Los Angeles
            [1] => San Francisco
        )

    [New York] => Array
        (
            [0] => Brooklyn
            [1] => Buffalo
        )
)

答案 3 :(得分:0)

像...一样的东西。

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

?>