2015-01-05 6 views
1

У меня есть ассоциативный массив, как этот:PHP Сортировка ассоциативный массив

$teams_name_points = array(); 

$name1 = "name1"; 
$name2 = "name2"; 
$teams_name_points[$name1] = 1; 
$teams_name_points[$name2] = 2; 

Я хочу, чтобы отсортировать этот массив по ключевым значениям, в настоящее время это отсортированный в алфавитном порядке по ключу.

Я попытался реализовать свою собственную функцию сортировки, но я не совсем понимаю, как это работает.

usort($teams_name_points, 'cmp'); 

function cmp(array $a, array $b){ 
    if ($a['foo'] < $b['foo']) { 
     return -1; 
    } else if ($a['foo'] > $b['foo']) { 
     return 1; 
    } else { 
     return 0; 
    } 
} 

Как заставить метод сравнения работать с моим массивом?

+1

'ksort()' Это делает трюк для вас? Также, пожалуйста, покажите, какой результат вы получите и какова ваша цель! – Rizier123

ответ

4

asort(), чтобы отсортировать Ваш массив.

http://php.net/manual/en/function.asort.php

Эта функция сортирует массив таким образом, что индексы массива поддерживают их корреляцию с элементами массива они связаны. Это используется в основном при сортировке ассоциативных массивов, где фактический порядок элементов значителен.

+0

Это сортирует его по значению не по ключу – Rizier123

+3

@ Rizier123 op говорит: «Я хочу отсортировать этот массив по ** ключевым значениям **, в настоящее время он отсортирован в алфавитном порядке ** с помощью клавиши **. »- Поэтому я предполагаю, что« Сортировка по значению и содержанию-ключи »- это то, что он ищет, если« сортировка по ключу »- это текущая ситутация, которую он сделал не хочу. – dognose

+0

Я тоже понял ... @Marcus: прочитайте документы, если вы можете читать php.net/manual/en/array.sorting.php – Eugen

0

Просто достаточно, as per the manual, вы хотите принять значения значений массивов в качестве аргументов cmp().

E.g.

cmp($earlier_array_value, $later_array_value){ 
    ... 
} 

Кроме того, конечно, иметь в виду, что usort() только оправдано, когда вы используете сравнение, которое на заказ и не-числовым просто. Простые сравнения по > или < можно сделать с помощью existing native sort functions.

1
$teams_name_points = array(); 

$name1 = "name1"; 
$name2 = "name2"; 
$teams_name_points[$name1] = 2; 
$teams_name_points[$name2] = 1; 
print_r($teams_name_points); 
asort($teams_name_points); // sort by value low to high 
print_r($teams_name_points); 
arsort($teams_name_points); // sort by value high to low 
print_r($teams_name_points); 
+0

Также правильный ответ, но я могу только принять его так, чтобы у вас был мой upvote – Marcus

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