2013-09-27 72 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。