用PHP格式化数据库行的层次结构

用PHP格式化数据库行的层次结构,php,structure,hierarchy,Php,Structure,Hierarchy,我正在尝试用PHP从数据库行格式化层次结构布局,比如这些行。有人能帮我吗?我试过使用foreach循环,如果国家不同,我会设置一个开关,但我无法让其他人正确格式化 ID City State Country ================================================== 1 Dallas Texas United States 2 Baltimore Marylan

我正在尝试用PHP从数据库行格式化层次结构布局,比如这些行。有人能帮我吗?我试过使用foreach循环,如果国家不同,我会设置一个开关,但我无法让其他人正确格式化

ID      City        State         Country
==================================================
1       Dallas      Texas         United States
2       Baltimore   Maryland      United States
3       Houston     Texas         United States
4       Essex       London        United Kingdom
5       Salford     Manchester    United Kingdom
最好在多选字段中为我提供以下信息

United States
--Maryland
----Baltimore
--Texas
----Dallas
----Houston
United Kingdom
-- London
---- Essex
-- Manchester
----Salford


<select multiple="yes" name="locations">
  <option value="United States">United States</option>
  <option value="Maryland">-- Maryland</option>
  <option value="Baltimore">---- Baltimore</option>
  <option value="Texas">-- Texas</option>
  <option value="Dallas">---- Dallas</option>
  <option value="Houston">---- Houston</option>
  <option value="United Kingdom">United Kingdom</option>
  <option value="London">-- London</option>
  <option value="Essex">---- Essex</option>
  <option value="Manchester">-- Manchester</option>
  <option value="Salford">---- Salford</option>
</select>

这里的基本目标是对行进行迭代,将它们放置在您正在寻找的层次结构中。我的建议是这样的:这可能会给你一些电子严格的警告,但这里和那里的一点错误检查并不会导致任何人死亡。然后可以随意从层次结构打印

$locations = array();
foreach($rows as $row)
    locations[$row->Country][$row->state][$row->city] = $row->id;

echo '<select multiple="yes" name="locations">';

$foreach($locations as $country=>$states){
    echo "<option value='$country'>$country</option>";
    $foreach($states as $state=>$cities){
        echo "<option value='$state'>-- $state</option>";
        $foreach($cities as $city=>$id)
            echo "<option value='$city'>---- $city</option>";
    }
}

echo '</select>';

很不清楚你想在这里做什么,我不同意。我认为你想要什么很清楚,不清楚的是你尝试过的方法。您通常应该发布代码示例来解释您的思维过程。@FrankieTheKneeMan这是一个很好的观点。为未来着名。嗨,谢谢你的回复,我尝试了你的代码,但只有一个城市显示过?:好像每次都会覆盖整个城市。对不起。必须将其更改为使用索引作为城市。@HerbageOnion。。。那有用吗?那就行了Frankie,那就行了。谢谢: