на выхлопе есть массив с городами , отсортированный в алфавитном порядке. Необходимо Москву и Питер поставить первыми, а далее также в алфавитном порядке Побывал сдвинуть ключи массива, и поменять Москве и Питеру на 01 и 02. Но чего-то не выходит. Подскажите пожалуйста правильный алгоритм, как решить эту задачу Заранее спасибо
array(4) {
[0]=> array(8) {
["CITY"]=>
string(18) "Волгоград"
}
[1]=> array(8) {
["CITY"]=>
string(18) "Ростов-на-Дону"
}
[2]=> array(8) {
["CITY"]=>
string(18) "Казань"
}
[3]=> array(8) {
["CITY"]=>
string(18) "Москва"
}
[4]=> array(8) {
["CITY"]=>
string(18) "Санкт-Петербург"
}
[5]=> array(8) {
["CITY"]=>
string(18) "уфа"
}}
Или как правильно при переборке масива foreach менять ключи у Москвы и Питера, и ставить их выше других
Коряво получилось, но работает ))
for($i = 0; $i < count($array); $i++){
foreach ($array[$i] as $key=>$value){
if ($key == 'CITY' && $value == 'Москва' || $value == 'Санкт-Петербург'){
$array2[] = $array[$i];
unset($array[$i]);
}
}
}
foreach ($array2 as $city){
array_unshift($array, $city);
}
var_dump($array);
Можно использовать пользовательскую сортировку usort. Вот пример:
$ar_sort = [
100 =>'Москва',
50 => 'Санкт-Петербург'
];
usort($array, function($a, $b) use($ar_sort) {
$a_key = array_search($a['CITY'], $ar_sort);
$b_key = array_search($b['CITY'], $ar_sort);
if($a_key > $b_key) {
return -1;
} else if($a_key < $b_key) {
return 1;
} else if($a['CITY'] > $b['CITY']) {
return 1;
} else if($a['CITY'] < $b['CITY']) {
return -1;
}
return 0;
});
То есть идея простая: Имеем массив сортировки $ar_sort. Сначала ищем вхождение в него и сравниваем результат, а уже после сравниваем как обычные строки.
Можно удалить Москву и Питер, а затем добавить их в начало массива.
function capitals($item){
return in_array($item['CITY'], ['Москва', 'Санкт-Петербург']);
}
function not_capitals($item){
return !capitals($item);
}
$arr = [ваш массив с городами];
$capitals = array_filter($arr, "capitals"); // Столицы
$notCapit = array_filter($arr, "not_capitals"); // Остальные города
// результирующий массив, где москва и питер в начале
$result = array_merge($capitals, $notCapit);
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Подскажите, пожалуйста, как организовать хранение настроек пользователей: в cookie или в базе данных? Например, пользователь на сайте выбрал,...
Устанавливаю вот такой вот модуль https://opencartforumcom/files/file/1011-dostavka-po-oblastyam-na-karte/ , но по какой-то причине не меняется его статус и он не хочет работать
Можно ли использовать инструкцию echo внутри массива $_SESSION? Нужно, чтобы каждый элемент массива имел уникальное имя