0

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>
4

1 に答える 1

0

ここでの基本的な目標は、行を繰り返し処理して、探している階層構造に配置することです。私はこのようなものを提案します:(これはおそらくあなたにいくつかのE-STRICT警告をネットしますが、こことそこをチェックする小さなエラーは誰も殺しませんでした)。その後、階層構造から自由に印刷できます。

$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>';
于 2012-08-21T15:54:47.777 に答える