Сортировка массива по своим значениям
Всем добрый день, такой вопрос, есть массив который выводит ключ - значение, по алфавиту пример
[0] => Волгоград
[1] => Воронеж
[2] => Екатеринбург
Мне нужно получить вывод массива в другом порядке, и вывести по полю сортировка числу от меньшего к большему, по тем числам, что указаны в другом массиве:
Другой массив имеет такой тип данных:
[CITIES_LIST] => Array
(
[1001] => Array
(
[NAME] => Екатеринбург
[SORT] => 110
)
[29] => Array
(
[NAME] => Воронеж
[SORT] => 110
)
[49] => Array
(
[NAME] => Волгоград
[SORT] => 120
)
Т.Е. Екатеринбург по полю SORT должен стать на первое место по этому массиву Скажите как это сделать?
Спасибо!
Ответы (2 шт):
А с чего вы взяли, что по нужному вам алгоритму будет первым Екатеринбург? Если в первую очередь вы сортируете по ключу SORT то первым будет 'Воронеж' т.к после сортировки по SORT, при одинаковых значениях - 110 интерпретатор дополнительно отсортирует массив по алфавиту т.е первым будет Воронеж, пример (на скорую руку):
$arrays['CITIES_LIST'] = array(
'29' => array(
'NAME'=> 'Воронеж',
'SORT'=> '110'
),
'49' => array(
'NAME'=> 'Волгоград',
'SORT'=> '120'
),
'1001' => array(
'NAME'=> 'Екатеринбург',
'SORT'=> '110'
),
);
uasort($arrays['CITIES_LIST'], function ($a, $b) { return $a['SORT'] - $b['SORT']; });
Результат
print_r($arrays['CITIES_LIST']);
Array
(
[29] => Array
(
[NAME] => Воронеж
[SORT] => 110
)
[1001] => Array
(
[NAME] => Екатеринбург
[SORT] => 110
)
[49] => Array
(
[NAME] => Волгоград
[SORT] => 120
)
)
Как вариант:
<?php
$arr1 = array(
0 => 'Волгоград',
1 => 'Воронеж',
2 => 'Екатеринбург',
);
$arr2 = array (
1001 => Array
(
'NAME' => 'Екатеринбург',
'SORT' => 110,
),
29 => Array
(
'NAME' => 'Воронеж',
'SORT' => 110
),
49 => Array
(
'NAME' => 'Волгоград',
'SORT' => 120,
),
);
// простой вывод значений в нужном порядке
foreach ($arr2 as $key=>$value ) {
if ( in_array( $value['NAME'], $arr1 ) ) {
echo $value['NAME']. "\r\n";
}
}
// создаем массив с ключами
foreach ($arr2 as $key=>$value ) {
if ( in_array( $value['NAME'], $arr1 ) ) {
$arr3 [ array_search( $value['NAME'], $arr1 ) ] = $value['NAME'];
}
}
var_dump ($arr3);
Результат:
Екатеринбург
Воронеж
Волгоград
array(3) {
[2]=>
string(24) "Екатеринбург"
[1]=>
string(14) "Воронеж"
[0]=>
string(18) "Волгоград"
}