PHP – создание многоуровневого ассоциативного массива из базы данных (сортировка городов по состоянию из db)

Я несколько новичок в php, и в последние несколько часов мне громыхал мозг, пытаясь понять это. Мне нужно сортировать города по штатам из базы данных. Я использовал следующий запрос для извлечения набора данных:

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

Это показывает мне информацию, которая мне нужна, когда я запускаю ее как запрос в phpMyAdmin, однако я не могу понять, как ее получить в массив и зацикливать.

Формат, который мне нужно вывести, – это

 CA Los Angeles San Francisco New York Brooklyn Buffalo 

Мне также нужно, чтобы каждый город возвращал ссылку, но я уверен, что смогу сделать это с помощью «.item ['$ city»].

Любая помощь очень ценится!

Спасибо, парни!

Закончилось использование следующего кода:

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

MySQL просто даст вам список. Вам нужно проверить, совпадает ли текущее состояние с последним состоянием. Если это так, продолжайте перечислять города, иначе начните новый сегмент, распечатав состояние и город …

Java-код:

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

Результаты уже отсортированы, это должно работать:

 $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 ) ) 

Что-то вроде…

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