2013-12-15 3 views
0

У меня есть массив следующей структуры:PHP Сортировка по определенному полю в массиве

Array ([0] => Array ([event] => event1 [Weight] => 2) 

И я пытаюсь сортировать «Вес». Я пробовал:

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

Но это не сортировка по весу. Кажется, я отношусь к весу, но я не уверен, как это сделать правильно.

+2

Где линия, которая фактически инициирует сортировку? Должно быть что-то вроде 'usort()'. Вот правильный пример: https://eval.in/79635 – ComFreek

ответ

1

Вы можете сортировать это так:

uasort($array, function ($a, $b) { 
    $c = $a['Weight']; 
    $d = $b['Weight']; 
    if ($c == $d){ 
     return 0; 
    } 
    else if($c > $d){ 
     return 1; 
    } 
    else{ 
     return -1; 
    } 
}); 
0
<?php 
// Obtain a list of columns 
//$data = Your Array 
foreach ($data as $key => $row) { 
    $weight[$key] = $row['Weight']; 
} 

// Sort the data with volume descending, edition ascending 
// Add $data as the last parameter, to sort by the common key 
array_multisort($weight, SORT_ASC, $data); 
?> 
0

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

$array = array(
     array('event'=> 'something', 'Weight' => 2), 
     array('event'=> 'something', 'Weight' => 1), 
     array('event'=> 'something', 'Weight' => 10), 
     array('event'=> 'something', 'Weight' => 10), 
     array('event'=> 'something', 'Weight' => 0), 
     array('event'=> 'something', 'Weight' => 1), 
     array('event'=> 'something', 'Weight' => -10), 
    ); 

function weightCmp($isAscending = true) { 
    return function($a, $b) use ($isAscending) { 
     $diff = $a['Weight'] - $b['Weight']; 
     return $isAscending ? $diff : $diff * -1; 
    }; 
} 

usort($array, weightCmp()); 
var_dump($array); 

usort($array, weightCmp(false)); 
var_dump($array); 
Смежные вопросы