2015-03-19 7 views
-4

Да, я знаю, что существует множество вопросов, подобных этому. Я хочу переупорядочить свой массив на основе «величины» в этом массиве в порядке убывания. Я использовал все подходящие методы (array_multisort(), arsort() и т. Д.), Но не понял, как получить именно то, что я хочу.PHP Сортировка массива на основе значения

Array ([alCrn] => 27113 [epcid] => IMC601 [last_access] => 2015-03-14 15:26:40 [magnitude] => 1) 
Array ([alCrn] => 27114 [epcid] => IMC602 [last_access] => 2015-03-16 20:45:17 [magnitude] => 8) 
Array ([alCrn] => 27115 [epcid] => IMC603 [last_access] => 2015-03-15 17:57:58 [magnitude] => 2) 
Array ([alCrn] => 27120 [epcid] => IMC608 [last_access] => 2015-03-15 23:56:16 [magnitude] => 12) 
Array ([alCrn] => 27122 [epcid] => IMC612 [last_access] => 2015-03-15 19:55:02 [magnitude] => 2) 
Array ([alCrn] => 27123 [epcid] => IMC615 [last_access] => 2015-03-17 14:00:34 [magnitude] => 6) 

Проблема была ...

Он должен был сделать с массивом не правильно отформатированный. Я должен был принять результаты запроса MySQL и поместить их все в массив, как так:

$count = 0; 
while($prefix_rows = $prefix_results->fetch_assoc()){ 
    //the results are not yet ordered according to the number of clicks...save each row in an array and sort using php in next step 
    $prefix_rows_arr[$count]['alCrn'] = $prefix_rows['alCrn']; 
    $prefix_rows_arr[$count]['epcid'] = $prefix_rows['epcid']; 
    $prefix_rows_arr[$count]['last_access'] = $prefix_rows['last_access']; 
    $prefix_rows_arr[$count]['magnitude'] = $prefix_rows['magnitude']; 

    $count++;    
} 

После этого, мне нужно цикл Еогеасп организовать $ prefix_rows_arr:

foreach($prefix_rows_arr as $row){ 
    $arr[] = $row; 
} 

Тогда, наконец, usort() работали, как и ожидалось

function compareMagnitudes($a, $b){ 
    if ($a['magnitude'] == $b['magnitude']) { 
     return 0; 
    } 
    return ($a['magnitude'] > $b['magnitude']) ? -1 : 1;  
} 
usort($arr, 'compareMagnitudes'); 
+0

'usort' должно быть достаточно, любой основной пример из документа поможет вам. – Sugar

+1

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

+0

Иногда трудно сформулировать проблему, с которой не совсем знакомы. Я не думал, что случайные биты кода сортировки помогут в этой ситуации. Иногда это сайт Catch 22 на этом сайте. – Ravioli87

ответ

1

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

function cmp($a, $b) { 
    if ($a['key'] == $b['key']) { 
     return 0; 
    } 
    return ($a['key'] < $b['key']) ? -1 : 1; 
} 

usort($your_array, "cmp"); 

Заменить key в функции comparaison на нужное значение, magnitude в вашем случае.

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