2013-07-26 128 views
-2

我有一個數組,格式如下 - 我想能夠排序這個,所以最高價格是第一 - 我試過array_multisort(),但我沒有任何運氣至今。按'價格'值對數組排序

$working[33] = array('id' => '33', 'price' => '250.00'); 
    $working[34] = array('id' => '34', 'price' => '277.88'); 

使用某些功能,通過價格最終產品應該作爲排序如下: - 作爲277價格高於250

$working[34] = array('id' => '34', 'price' => '277.88'); 
    $working[33] = array('id' => '33', 'price' => '250.00'); 
+2

[如何通過PHP中給定鍵的值對關聯數組的數組進行排序](http://stackoverflow.com/questions/1597736/how-to-sort-an-array-of-associative -array -a-given-key-in-php) –

+1

array_multisort($ working,SORT_ASC); - 這似乎工作.. – Zabs

+1

@Zabs然後請刪除該問題。 – 19greg96

回答

2

使用下面的函數來獲得你的問題解決

function multisort (&$array, $key) { 
     $valsort=array(); 
     $ret=array(); 
     reset($array); 
     foreach ($array as $ii => $va) { 
      $valsort[$ii]=$va[$key]; 
     } 
     asort($valsort); 
     foreach ($valsort as $ii => $va) { 
      $ret[$ii]=$array[$ii]; 
     } 
     $array=$ret; 
    } 

multisort($multiarr,"order"); 
1

刪除引號或使用數字排序。

字符串 「24」 比 「1834」 更大,因爲2大於1

我的解決方案

$working[33] = array('id' => '33', 'price' => '250.00'); 
$working[34] = array('id' => '34', 'price' => '277.88'); 
$working[35] = array('id' => '35', 'price' => '1289.57'); 
$working[36] = array('id' => '36', 'price' => '15.42'); 

foreach ($working as $key => $row) { 
    $price[$key] = $row['price']; 
} 

array_multisort($price, SORT_NUMERIC, $working); 

var_dump($working); 

輸出

array(4) { 
    [0]=> 
    array(2) { 
    ["id"]=> 
    string(2) "36" 
    ["price"]=> 
    string(5) "15.42" 
    } 
    [1]=> 
    array(2) { 
    ["id"]=> 
    string(2) "33" 
    ["price"]=> 
    string(6) "250.00" 
    } 
    [2]=> 
    array(2) { 
    ["id"]=> 
    string(2) "34" 
    ["price"]=> 
    string(6) "277.88" 
    } 
    [3]=> 
    array(2) { 
    ["id"]=> 
    string(2) "35" 
    ["price"]=> 
    string(7) "1289.57" 
    } 
} 
+0

有人提出這個問題。我不知道爲什麼。 – Jon

+0

這是解決方案! – Macbric

+0

沒有必要將字符串轉換爲數字/浮點數。 – Benz

5

使用usort排序:

usort($working, function($a, $b) { 
    return $a['price'] < $b['price'] ? 1 : -1; 
});