PHP: crea una matriz asociativa multinivel a partir de la base de datos (ordenando ciudades por estado desde db)

Soy algo nuevo en php y he estado sacudiendo mi cerebro durante las últimas horas tratando de resolver esto. Necesito ordenar ciudades por estado desde una base de datos. Utilicé la siguiente consulta para recuperar el conjunto de datos:

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

Esto me muestra la información que necesito cuando la ejecuto como una consulta en phpMyAdmin, sin embargo, parece que no puedo encontrar la forma de ponerla en una matriz y buclearla.

El formato que necesito para dar salida es

 CA Los Angeles San Francisco New York Brooklyn Buffalo 

También necesito poder hacer que cada ciudad devuelva un enlace, pero estoy bastante seguro de que puedo hacerlo con “.item [‘$ city’]”.

¡Cualquier ayuda es muy apreciada!

¡Gracias chicos!

Terminó usando el siguiente código:

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

" . $row['state'] . "

"; $exists[$row['state']] = true; } echo ""; }

MySQL solo te dará una lista. Debe verificar si el estado actual es el mismo que el último estado. Si es así, continúe enumerando las ciudades, de lo contrario, comience un nuevo segmento, imprimiendo el estado y la ciudad …

Código similar a Java:

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

Los resultados ya están ordenados, esto debería funcionar:

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

Entrada:

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

Salida ( @ CodePad ):

 Array ( [CA] => Array ( [0] => Los Angeles [1] => San Francisco ) [New York] => Array ( [0] => Brooklyn [1] => Buffalo ) ) 

Algo como…

 ' . $row['state'] . '

'; $exists[$row['state']] = true; } echo '

' . $row['city'] . '

'; } ?>