I need to sort the array below in alphabetical order using the numeric key:
Array
(
[AM] => Array
(
[1] => Array
(
[localidade] => Arena da Amazonia
[cidade] => MANAUS
[estado] => Amazonia
[acronym] => AM
)
[2] => Array
(
[localidade] => Ponto de Apoio
[cidade] => MANAUS
[estado] => Amazonia
[acronym] => AM
)
)
[BA] => Array
(
[4] => Array
(
[localidade] => Arena Fonte Nova
[cidade] => SALVADOR
[estado] => Bahia
[acronym] => BA
)
[3] => Array
(
[localidade] => Ponto de Apoio
[cidade] => SALVADOR
[estado] => Bahia
[acronym] => BA
)
)
[DF] => Array
(
[7] => Array
(
[localidade] => Estádio Mané Garrincha
[cidade] => BRASILIA
[estado] => Distrito Federal
[acronym] => DF
)
[8] => Array
(
[localidade] => Ponto de Apoio
[cidade] => BRASILIA
[estado] => Distrito Federal
[acronym] => DF
)
)
[MG] => Array
(
[10] => Array
(
[localidade] => Mineirão
[cidade] => BELO HORIZONTE
[estado] => Minas Gerais
[acronym] => MG
)
[9] => Array
(
[localidade] => Ponto de Apoio
[cidade] => BELO HORIZONTE
[estado] => Minas Gerais
[acronym] => MG
)
[6] => Array
(
[localidade] => Estádio Mané Garrincha
[cidade] => BRASILIA
[estado] => Belo Horizonte
[acronym] => MG
)
[5] => Array
(
[localidade] => Ponto de Apoio
[cidade] => CONFINS
[estado] => Belo Horizonte
[acronym] => MG
)
)
[RJ] => Array
(
[24] => Array
(
[localidade] => Ponto de Apoio
[cidade] => NITEROI
[estado] => Rio de Janeiro
[acronym] => RJ
)
[15] => Array
(
[localidade] => Ponto de Apoio
[cidade] => NOVA IGUACU
[estado] => Rio de Janeiro
[acronym] => RJ
)
[18] => Array
(
[localidade] => Barra - Centro de Golfe
[cidade] => RIO DE JANEIRO
[estado] => Rio de Janeiro
[acronym] => RJ
)
[19] => Array
(
[localidade] => Barra - Parque olimpico
[cidade] => RIO DE JANEIRO
[estado] => Rio de Janeiro
[acronym] => RJ
)
[21] => Array
(
[localidade] => Barra - Parque olimpico e Copacabana - Forte de Copacabana
[cidade] => RIO DE JANEIRO
[estado] => Rio de Janeiro
[acronym] => RJ
)
[17] => Array
(
[localidade] => Barra - Pontal
[cidade] => RIO DE JANEIRO
[estado] => Rio de Janeiro
[acronym] => RJ
)
[20] => Array
(
[localidade] => Barra - Rio Centro
[cidade] => RIO DE JANEIRO
[estado] => Rio de Janeiro
[acronym] => RJ
)
[28] => Array
(
[localidade] => Barra / Copacabana e Maracanã
[cidade] => RIO DE JANEIRO
[estado] => Rio de Janeiro
[acronym] => RJ
)
[12] => Array
(
[localidade] => Copacabana - Arena do Volei
[cidade] => RIO DE JANEIRO
[estado] => Rio de Janeiro
[acronym] => RJ
)
[11] => Array
(
[localidade] => Copacabana - Estadio da Lagoa
[cidade] => RIO DE JANEIRO
[estado] => Rio de Janeiro
[acronym] => RJ
)
[23] => Array
(
[localidade] => Copacabana - Forte de Copacabana
[cidade] => RIO DE JANEIRO
[estado] => Rio de Janeiro
[acronym] => RJ
)
[13] => Array
(
[localidade] => Copacabana - marina da Glória
[cidade] => RIO DE JANEIRO
[estado] => Rio de Janeiro
[acronym] => RJ
)
[25] => Array
(
[localidade] => Deodoro - Centro de Tiro / Estadio Olimpico / Centro Hoquei / Centro Aquatico / Arena da Juventude / Hipismo / Parque Radical
[cidade] => RIO DE JANEIRO
[estado] => Rio de Janeiro
[acronym] => RJ
)
[22] => Array
(
[localidade] => Maracana - Estádio Olimpico
[cidade] => RIO DE JANEIRO
[estado] => Rio de Janeiro
[acronym] => RJ
)
[26] => Array
(
[localidade] => Maracanã - Maracanazinho / Maracanã
[cidade] => RIO DE JANEIRO
[estado] => Rio de Janeiro
[acronym] => RJ
)
[16] => Array
(
[localidade] => Maracana - Maracanazinho/Maracana
[cidade] => RIO DE JANEIRO
[estado] => Rio de Janeiro
[acronym] => RJ
)
[27] => Array
(
[localidade] => Maracana - Sambodromo
[cidade] => RIO DE JANEIRO
[estado] => Rio de Janeiro
[acronym] => RJ
)
[14] => Array
(
[localidade] => Ponto de Apoio
[cidade] => RIO DE JANEIRO
[estado] => Rio de Janeiro
[acronym] => RJ
)
)
[SP] => Array
(
[30] => Array
(
[localidade] => Ponto de Apoio
[cidade] => GUARULHOS
[estado] => São Paulo
[acronym] => SP
)
[29] => Array
(
[localidade] => Arena Corinthians
[cidade] => SAO PAULO
[estado] => São Paulo
[acronym] => SP
)
[31] => Array
(
[localidade] => Ponto de Apoio
[cidade] => SAO PAULO
[estado] => São Paulo
[acronym] => SP
)
)
)
The output should look something like this:
array (
'AM' => array (
1 => array (
'cidade' => 'MANAUS',
'estado' => 'Amazonia',
'acronym' => 'AM',
'localidade' => 'Arena da Amazonia',
),
2 => array (
'cidade' => 'MANAUS',
'estado' => 'Amazonia',
'acronym' => 'AM',
'localidade' => 'Ponto de Apoio',
),
),
'BA' => array (
3 => array (
'cidade' => 'SALVADOR',
'estado' => 'Bahia',
'acronym' => 'BA',
'localidade' => 'Ponto de Apoio',
),
4 => array (
'cidade' => 'SALVADOR',
'estado' => 'Bahia',
'acronym' => 'BA',
'localidade' => 'Arena Fonte Nova ',
),
),
'DF' => array (
5 => array (
'cidade' => 'BRASILIA',
'estado' => 'Belo Horizonte',
'acronym' => 'DF',
'localidade' => 'Estádio Mané Garrincha',
),
6 => array (
'cidade' => 'BRASILIA',
'estado' => 'Distrito Federal',
'acronym' => 'DF',
'localidade' => 'Estádio Mané Garrincha',
),
7 => array (
'cidade' => 'BRASILIA',
'estado' => 'Distrito Federal',
'acronym' => 'DF',
'localidade' => 'Ponto de Apoio',
),
),
'MG' => array (
8 => array (
'cidade' => 'CONFINS',
'estado' => 'Belo Horizonte',
'acronym' => 'MG',
'localidade' => 'Ponto de Apoio',
),
9 => array (
'cidade' => 'BELO HORIZONTE',
'estado' => 'Minas Gerais',
'acronym' => 'MG',
'localidade' => 'Ponto de Apoio',
),
10 => array (
'cidade' => 'BELO HORIZONTE',
'estado' => 'Minas Gerais',
'acronym' => 'MG',
'localidade' => 'Mineirão',
),
),
'RJ' => array (
11 => array (
'cidade' => 'RIO DE JANEIRO',
'estado' => 'Rio de Janeiro',
'acronym' => 'RJ',
'localidade' => 'Copacabana - Estadio da Lagoa',
),
12 => array (
'cidade' => 'RIO DE JANEIRO',
'estado' => 'Rio de Janeiro',
'acronym' => 'RJ',
'localidade' => 'Copacabana - Arena do Volei',
),
13 => array (
'cidade' => 'RIO DE JANEIRO',
'estado' => 'Rio de Janeiro',
'acronym' => 'RJ',
'localidade' => 'Copacabana - marina da Glória',
),
14 => array (
'cidade' => 'RIO DE JANEIRO',
'estado' => 'Rio de Janeiro',
'acronym' => 'RJ',
'localidade' => 'Ponto de Apoio',
),
15 => array (
'cidade' => 'NOVA IGUACU',
'estado' => 'Rio de Janeiro',
'acronym' => 'RJ',
'localidade' => 'Ponto de Apoio',
),
16 => array (
'cidade' => 'RIO DE JANEIRO',
'estado' => 'Rio de Janeiro',
'acronym' => 'RJ',
'localidade' => 'Maracana - Maracanazinho/Maracana',
),
17 => array (
'cidade' => 'RIO DE JANEIRO',
'estado' => 'Rio de Janeiro',
'acronym' => 'RJ',
'localidade' => 'Barra - Pontal',
),
18 => array (
'cidade' => 'RIO DE JANEIRO',
'estado' => 'Rio de Janeiro',
'acronym' => 'RJ',
'localidade' => 'Barra - Centro de Golfe',
),
19 => array (
'cidade' => 'RIO DE JANEIRO',
'estado' => 'Rio de Janeiro',
'acronym' => 'RJ',
'localidade' => 'Barra - Parque olimpico',
),
20 => array (
'cidade' => 'RIO DE JANEIRO',
'estado' => 'Rio de Janeiro',
'acronym' => 'RJ',
'localidade' => 'Barra - Rio Centro',
),
21 => array (
'cidade' => 'RIO DE JANEIRO',
'estado' => 'Rio de Janeiro',
'acronym' => 'RJ',
'localidade' => 'Barra - Parque olimpico e Copacabana - Forte de Copacabana',
),
22 => array (
'cidade' => 'RIO DE JANEIRO',
'estado' => 'Rio de Janeiro',
'acronym' => 'RJ',
'localidade' => 'Maracana - Estádio Olimpico',
),
23 => array (
'cidade' => 'RIO DE JANEIRO',
'estado' => 'Rio de Janeiro',
'acronym' => 'RJ',
'localidade' => 'Copacabana - Forte de Copacabana',
),
24 => array (
'cidade' => 'NITEROI',
'estado' => 'Rio de Janeiro',
'acronym' => 'RJ',
'localidade' => 'Ponto de Apoio',
),
25 => array (
'cidade' => 'RIO DE JANEIRO',
'estado' => 'Rio de Janeiro',
'acronym' => 'RJ',
'localidade' => 'Deodoro - Centro de Tiro / Estadio Olimpico / Centro Hoquei / Centro Aquatico / Arena da Juventude / Hipismo / Parque Radical',
),
26 => array (
'cidade' => 'RIO DE JANEIRO',
'estado' => 'Rio de Janeiro',
'acronym' => 'RJ',
'localidade' => 'Maracanã - Maracanazinho / Maracanã',
),
27 => array (
'cidade' => 'RIO DE JANEIRO',
'estado' => 'Rio de Janeiro',
'acronym' => 'RJ',
'localidade' => 'Maracana - Sambodromo',
),
28 => array (
'cidade' => 'RIO DE JANEIRO',
'estado' => 'Rio de Janeiro',
'acronym' => 'RJ',
'localidade' => 'Barra / Copacabana e Maracanã',
),
),
'SP' => array (
29 =>
array (
'cidade' => 'SAO PAULO',
'estado' => 'São Paulo',
'acronym' => 'SP',
'localidade' => 'Arena Corinthians',
),
30 =>
array (
'cidade' => 'GUARULHOS',
'estado' => 'São Paulo',
'acronym' => 'SP',
'localidade' => 'Ponto de Apoio',
),
31 =>
array (
'cidade' => 'SAO PAULO',
'estado' => 'São Paulo',
'acronym' => 'SP',
'localidade' => 'Ponto de Apoio',
),
),
);
I tried these methods and none worked:
public function arraySortByColumn(&$arr, $col, $dir = SORT_ASC)
{
$sort_col = array();
foreach ($arr as $key=> $row) {
$sort_col[$key] = $row[$col];
}
array_multisort($sort_col, $dir, $arr);
}
public function findMultiIfArray($array, $field, $value)
{
while(isset($array[key($array)])){
if(strpos($array[key($array)][$field], $value) !== false){
return key($array);
}
next($array);
}
return -1;
}
public function sortKeyLocality($a, $b)
{
if ($a['localidade'] == $b['localidade']) {
return 0;
}
return ($a['localidade'] < $b['localidade']) ? -1 : 1;
}
function arraySort($array, $on, $order=SORT_ASC){
$new_array = array();
$sortable_array = array();
if (count($array) > 0) {
foreach ($array as $k => $v) {
if (is_array($v)) {
foreach ($v as $k2 => $v2) {
if ($k2 == $on) {
$sortable_array[$k] = $v2;
}
}
} else {
$sortable_array[$k] = $v;
}
}
switch ($order) {
case SORT_ASC:
asort($sortable_array);
break;
case SORT_DESC:
arsort($sortable_array);
break;
}
foreach ($sortable_array as $k => $v) {
$new_array[$k] = $array[$k];
}
}
return $new_array;
}
public function arraySortByColumnRecursive(&$arr, $col, $dir = SORT_ASC) {
$sort_col = array();
foreach ($arr as $key=> $row) {
if (is_array($row)) {
$sort_col[$key] = $row[$col];
$this->arraySortByColumnRecursive($row, $col, $dir);
}
}
array_multisort($sort_col, $dir, $arr);
}
To help other people, I'll put here, the method I did to bring the list of this
select optgroup
:
public function collectionLocais($collection)
{
$ufs = array("AC","AL","AM","AP","BA","CE","DF","ES","GO","MA","MT","MS","MG","PA","PB","PR","PE","PI","RJ","RN","RO","RS","RR","SC","SE","SP","TO");
$ufs = array_values(array_map('current', $ufs));
foreach ($ufs as $uf) {
foreach($collection as $k => $local) {
if ($uf == $local['uf']) {
$new_collection[$uf][$local['id']] = array(
'localidade' => $local['locality'],
'cidade' => $local['city'],
'estado' => $local['state'],
'acronym' => $uf
);
}
}
}
return $new_collection;
}