2015-01-19 24 views
0

У меня есть следующий массив:Отсортировать массив по ключам дорожат

Array 
(
    [0] => Array 
     (
      [Outcome] => 1 
      [Bookmaker] => PaddyPower 
      [Updated] => 2015-01-19T09:28:36 
      [Bet] => 1 
      [SP] => 4/5 
      [CP] => 17/20 
      [line] => 
      [Decimal] => 0.85 
     ) 

    [1] => Array 
     (
      [Outcome] => 1 
      [Bookmaker] => BetFair 
      [Updated] => 2015-01-19T09:59:12 
      [Bet] => 1 
      [SP] => 1/25 
      [CP] => 43/50 
      [line] => 
      [Decimal] => 0.86 
     ) 

    [2] => Array 
     (
      [Outcome] => 1 
      [Bookmaker] => BetVictor 
      [Updated] => 2015-01-19T10:29:38 
      [Bet] => 1 
      [SP] => 869/1000 
      [CP] => 869/1000 
      [line] => 
      [Decimal] => 0.87 
     ) 

    [3] => Array 
     (
      [Outcome] => 1 
      [Bookmaker] => BetFred 
      [Updated] => 2015-01-19T09:28:30 
      [Bet] => 1 
      [SP] => 4/5 
      [CP] => 17/20 
      [line] => 
      [Decimal] => 0.85 
     ) 

    [4] => Array 
     (
      [Outcome] => 1 
      [Bookmaker] => CoralBet 
      [Updated] => 2015-01-19T09:28:36 
      [Bet] => 1 
      [SP] => 73/100 
      [CP] => 83/100 
      [line] => 
      [Decimal] => 0.83 
     ) 

    [5] => Array 
     (
      [Outcome] => 1 
      [Bookmaker] => Bet365 
      [Updated] => 2015-01-19T09:35:59 
      [Bet] => 1 
      [SP] => 73/100 
      [CP] => 83/100 
      [line] => 
      [Decimal] => 0.83 
     ) 

    [6] => Array 
     (
      [Outcome] => 1 
      [Bookmaker] => WilliamHill 
      [Updated] => 2015-01-19T09:48:17 
      [Bet] => 1 
      [SP] => 4/5 
      [CP] => 83/100 
      [line] => 
      [Decimal] => 0.83 
     ) 

    [7] => Array 
     (
      [Outcome] => 1 
      [Bookmaker] => SkyBet 
      [Updated] => 2015-01-19T09:29:48 
      [Bet] => 1 
      [SP] => 67/100 
      [CP] => 83/100 
      [line] => 
      [Decimal] => 0.83 
     ) 

    [8] => Array 
     (
      [Outcome] => 1 
      [Bookmaker] => Ladbrokes 
      [Updated] => 2015-01-19T09:29:48 
      [Bet] => 1 
      [SP] => 3/4 
      [CP] => 4/5 
      [line] => 
      [Decimal] => 0.8 
     ) 

) 

и я пытаюсь отсортировать его по значению в ключе «Десятичного» в.

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

usort($outcomes, 'sort_by_decimal'); 
function sort_by_decimal ($a, $b) 
{ 
    return $a['Decimal'] - $b['Decimal']; 
} 

Thank you.

ответ

3

Вы почти находитесь. Снова прочитайте usort() documentation page. Это говорит в Примечание на описании параметра value_compare_func:

int callback (mixed $a, mixed $b)

Осторожно

Возвращение нецелые значения из функции сравнения, такие как поплавок, приведет к внутреннее преобразование в целое число возвращаемого значения обратного вызова. Таким образом, значения, такие как 0,99 и 0,1, будут приведены к целочисленному значению 0, которое сравнивает такие значения как равные.

Теперь я думаю, что это ясно, чем ваша функция должна читать что-то вроде:

function sort_by_decimal ($a, $b) 
{ 
    if ($a['Decimal'] < $b['Decimal']) { 
     return -1; 
    } elseif ($a['Decimal'] > $b['Decimal']) { 
     return +1; 
    } else { 
     return 0; 
    } 
} 
+0

Привет @axiac большого спасибо за объяснение. Однако теперь он перестроил мой массив с «лучшим», как в самом высоком в самом низу массива, см .: http://pastebin.com/NJ2KCB5M – StuBlackett

+1

Это зависит от вашей функции сравнения, что является «лучшим». Функция 'usort()' сортирует элементы «восходящие», т. Е. Самые маленькие сначала. Если вам нужна самая большая первая, тогда измените функцию 'sort_by_decimal()', чтобы вернуть '-1', когда' $ a' больше, чем '$ b' (и' + 1' они, конечно, находятся в противоположных отношениях). – axiac

+0

Большое спасибо @axiac, отменяющий логику, получил это, чтобы работать – StuBlackett