2016-03-24 3 views
-1

У меня есть массив со структурой, как этот $ product_array образца =PHP usort порядок многомерный массив по цене возрастанию

[0] => Array 
     (
      [title] => M-SPA Super Camaro B-150 6-Person Inflatable Bubble Spa 
      [image] => http://ecx.images-amazon.com/images/I/41F6FuitoYL._SL160_.jpg 
      [link] => http://www.amazon.com/stuff 
      [price] => 960.01 
      [merchant] => amazon 
      [discount] => 16 
      [brand] => M-SPA 
     ) 

    [1] => Array 
     (
      [title] => M Spa Model B-130 Camaro Hot Tub, 71 by 71 by 28-Inch, Gray 
      [image] => http://ecx.images-amazon.com/images/I/41zQwjaPqOL._SL160_.jpg 
      [link] => http://www.amazon.com/stuff 
      [price] => 695.01 
      [merchant] => amazon 
      [discount] => 
      [brand] => M-SPA 
     ) 

    [2] => Array 
     (
      [title] => M-SPA B-121 4-Person Inflatable Bubble Spa, Castello 
      [image] => http://ecx.images-amazon.com/images/I/41gnYSSVD5L._SL160_.jpg 
      [link] => http://www.amazon.com/stuff 
      [price] => 1,016.25 
      [merchant] => amazon 
      [discount] => 
      [brand] => M-SPA 
     ) 

Я не могу заказать этот массив с ценой наименьшего к наибольшему .. Этот код не является работая

function order_by_price($a, $b) { 
    if ($a['price'] == $b['price']) { 
     return 0; 
    } 
    return ($a['price'] < $b['price']) ? -1 : 1; 
} 
usort($product_array,order_by_price); 

Что я отсутствующий Благодаря

+0

Что такое результат, который вы получите обратно? – Ohgodwhy

+0

Возможный дубликат [Сортировка множества многомерных массивов элементами массива] (http://stackoverflow.com/questions/2915705/sort-a-set-of-multidimensional-arrays-by-array-elements) –

ответ

0

у вас есть не-хорошо сформированная числовая в lue в последнем элементе массива ... [price] => 1,016.25 ....
Это «формат денег» и должен быть представлен в виде строки: [price] => "1,016.25".
Кроме того, есть определенная осторожность при работе с usort параметрами:

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

После надлежащего замены (форматирование) изменить код, как показано ниже:

function order_by_price($a, $b) { 
    $floats = str_replace(",", "", [$a['price'], $b['price']]); 
    return ($floats[0] == $floats[1])? 0 : (($floats[0] < $floats[1]) ? -1 : 1); 
} 

usort($product_array,"order_by_price"); 

выше будет работать, как ожидалось ...