2012-04-30 3 views
0

У меня есть массив, который мне нужно переупорядочить. Это массив кодов стран:Сортировка массивов на основе строки?

$countries = array('uk', 'fr', 'es', 'de', 'it'); 

Мне нужно сначала отсортировать массив с конкретным выбранным пользователем страной, т.е. 'fr', а остальные предметы должны быть в алфавитном порядке.

Я не слишком уверен, как это сделать, любая помощь будет оценена по достоинству.

ответ

3
$countries = array('uk', 'fr', 'es', 'de', 'it'); 
// find and remove user value 
$uservar = 'uk'; 
$userkey = array_search($uservar, $countries); 
unset($countries[$userkey]); 
// sort ascending 
sort($countries,SORT_ASC); 
// preappend user value 
array_unshift($countries, $uservar); 
+0

Я не знаю точно, но он, вероятно, сохранит μs, если вы сначала отключите значение, затем отсортируйте его, а затем добавьте его, потому что тогда сортировать нечего. :-) – YMMD

+0

@YMMD ваш, вероятно, правый !!!! обновил мой заказ !!!! * Оптимизирован для производительности * сейчас – ManseUK

0

См. here для получения дополнительной информации по сортировке массивов.

0
// The option the user selected 
$userSelectedOption = 'fr'; 

// Remove the user selected option from the array 
array_splice($countryCodes, array_search($userSelectedOption, $countryCodes), 1); 

// Sort the remaining items 
sort($countryCodes, SORT_ASC); 

// Add the user selected option back to the beginning 
array_unshift($countryCodes, $userSelectedOption); 
2

Это немного долго, но он должен работать.

<?php 
    $user_selected = 'fr'; 

    $countries = array('uk', 'fr', 'es', 'de', 'it'); 
    unset($countries[ array_search($user_selected, $countries) ]); // remove user selected from the list 
    sort($countries); // sort the rest 

    array_unshift($countries, $user_selected); // put the user selected at the beginning 

    print_r($countries); 
?> 
+0

Ваш «неустановленный» неверен. '$ user_selected' - это значение, а не ключ. В противном случае, хорошее решение (алгоритм вполне нормальный). –

+0

Вордс, ты прав. Закрепление. – Nadh

Смежные вопросы