2015-03-25 1 views
0

У меня ОСНОВНЫЕ проблемы usort()! :(Так что в основном я хочу отсортировать свой массив по их значениям. Мне бы хотелось, чтобы значения отображались в следующем порядке: Platinum, Gold, Silver, Bronze, Complete, None, Uncomplete. Теперь я могу сортировать их хорошо, но я бы хотел, чтобы сохранить их ключ (это возможно?) вот мой код:.?!Упорядочить без замены ключей PHP

function compareMedals($a, $b) { 
    $aMap = array(1 => 'Platinum', 2 => 'Gold', 3 => 'Silver', 4 => 'Bronze', 5 => 'Complete', 6 => 'None', 7 => 'Uncomplete'); 
    $aValues = array(1, 2, 3, 4, 5, 6, 7); 
    $a = str_ireplace($aMap, $aValues, $a); 
    $b = str_ireplace($aMap, $aValues, $b); 
    return $a - $b; 
} 
usort($list, 'compareMedals'); 

Итак, можно сортировать их, сохраняя при этом свои ключи Спасибо :)

EDIT

Массив:

$array = array("post1" => 'Platinum', "Post2" => "Bronze, "Post3" = > Gold) 

Должен ли выход:

"Post1" => 'Platinum', 
"Post3" => 'Gold', 
"Post2" => 'Bronze' 

Но он выводит это:

"0" => 'Platinum', 
"1" => 'Gold', 
"2" => 'Bronze' 
+0

Было бы более понятным, если бы вы описали, что вы получаете сейчас (а затем и отличие от желаемого результата). –

ответ

4

uasort Просто используйте Intead из usort. Определение uasort является

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

Существует пример кода с сравнивая функции и uasort:

$list = array('post1' => 'Gold', 'post2' => 'None', 'post3' => 'Platinum'); 

function compareMedals($a, $b) { 
    $aMap = array(1 => 'Platinum', 2 => 'Gold', 3 => 'Silver', 4 => 'Bronze', 5 => 'Complete', 6 => 'None', 7 => 'Uncomplete'); 
    $aValues = array(1, 2, 3, 4, 5, 6, 7); 
    $a = str_ireplace($aMap, $aValues, $a); 
    $b = str_ireplace($aMap, $aValues, $b); 
    return $a - $b; 
} 
uasort($list, 'compareMedals'); 

print_r($list); 

Этот код дает результат

Array 
(
    [post3] => Platinum 
    [post1] => Gold 
    [post2] => None 
) 
+0

Как я могу сделать эту функцию? –

+0

Если я правильно понимаю ваш вопрос, вам просто нужно заменить usort на uasort. Вам не нужно менять функцию сравнения или что-то еще. Я добавил пример того, что вы получаете. Вам нужен этот результат? – SeriousDron

+0

Он сортирует их правильно, но он меняет ключи только на количество его индекса. Поэтому давайте скажем, что массив был массивом (post1 => 'Gold', post2 => 'None', post3 => 'Platinum'), после чего он дает мне массив (2 => Platinum, 0 => Gold, 1 => None) , Он не сохраняет «пост» часть ключа. –

1

usort не сохранил ключ, если вы хотите сохранить ключ после сортировки, то вы должны использовать asort. Надеюсь, это поможет вам.

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

  • Нет связанных вопросов^_^