Я несколько новичок в 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>'; } ?>