2013-09-27 82 views
1

我有以下的數組:PHP NAT排序關聯數組由值而不重新索引

$data['array'] = array(
    1 => array(
     'currency_name' => 'USD', 
     'totals' => '310.00 USD' 
    ), 
    24 => array(
     'currency_name' => 'EUR', 
     'totals' => '200.00 EUR' 
    ), 
    26 => array(
     'currency_name' => 'GBP', 
     'totals' => '100.00 GBP' 
    ) 
); 

我想通過currency_name鍵進行排序,我用下面的函數:

// sort the array by currency_name key 
$sort = array(); 
foreach ($data['array'] as $i => $row) 
{ 
    $sort[$i] = $row['currency_name']; 
} 
array_multisort($sort, SORT_NATURAL, $data['array']); 

輸出:

Array 
(
    [array] => Array 
     (
      [0] => Array 
       (
        [currency_name] => EUR 
        [totals] => 200.00 EUR 
       ) 

      [1] => Array 
       (
        [currency_name] => GBP 
        [totals] => 100.00 GBP 
       ) 

      [2] => Array 
       (
        [currency_name] => USD 
        [totals] => 310.00 USD 
       ) 

     ) 

) 

預計:

Array 
(
    [array] => Array 
     (
      [24] => Array 
       (
        [currency_name] => EUR 
        [totals] => 200.00 EUR 
       ) 

      [26] => Array 
       (
        [currency_name] => GBP 
        [totals] => 100.00 GBP 
       ) 

      [1] => Array 
       (
        [currency_name] => USD 
        [totals] => 310.00 USD 
       ) 

     ) 

) 

這是重建索引的陣列,這是我不想要的。我以後需要這些鑰匙。

注:
*我上面所使用的方法是this
*我需要SORT_NATURAL,因爲我使用此功能爲其他字符串了。

回答

6

正如你可以從array_multisort文檔中看到的,只保留關聯(字符串)鍵。您可以改用uasort

uasort($data['array'], function($a, $b) { 
    return strnatcmp($a['currency_name'], $b['currency_name']); 
}); 
+0

謝謝。它解決了我的問題 – machineaddict

1

您可以嘗試natcasesort($陣列)功能。此函數使用不區分大小寫的「自然順序」算法對數組進行排序。它在成功時返回TRUE或在失敗時返回FALSE。