2010-01-17 63 views
10

我想在PHP中按字母順序排列數組的值。如果所有的值都以相同的字符開始,那麼它們應該使用第二個字符進行排序等等。忽略大小寫。PHP:如何按字母順序排列數組的值?

例如:

before: 
values[0] = "programming"; 
values[1] = "Stackoverflow"; 
values[2] = "question"; 
values[3] = "answers"; 
values[4] = "AA Systems"; 

after: 
values[0] = "AA Systems"; 
values[1] = "answers"; 
values[2] = "programming"; 
values[3] = "question"; 
values[4] = "Stackoverflow"; 

我已經發現了一些算法,但我想要的方式,速度快,有少數語句。忽略區分大小寫對我來說很特別。謝謝。

回答

5

你舉的例子提出了兩個假設:

  1. 你只處理簡單的,一維數組。

  2. 按字母順序排序後,您的索引將更新,以便按字母順序將第一個元素指定爲鍵0等等。

給出這些參數,最簡單的解決方案是使用數組方法sort()。隨着你的榜樣:

$values[0] = "programming"; 
$values[1] = "Stackoverflow"; 
$values[2] = "question"; 
$values[3] = "answers"; 
$values[4] = "AA Systems"; 

sort($values); 

這將導致以下:

Array { 
    [0] => AA Systems 
    [1] => Stackoverflow 
    [2] => answers 
    [3] => programming 
    [4] => question 
} 

other array sorting functions這可能是一個更好的選擇。例如,上面我使用的簡單的一個將大寫字母放在小寫字母的前面,因此如果您將「安全性」作爲一個項目(所有小寫字母),它會在「Stackoverflow」之後進行,因爲大寫s會優先於se而不是st。排序時不區分大小寫,你可以使用natcasesort(),這將產生與定數組中的以下內容:

Array { 
    [0] => AA Systems 
    [1] => answers 
    [2] => programming 
    [3] => question 
    [4] => Stackoverflow 
} 
+0

排序區分大小寫。在*答案之前,Stackoverflow將被放置*。 – Tyzoid 2013-04-06 19:48:50

4

隨着5.4.0版本,你可以使用任何的sortasortksort等功能並通過SORT_FLAG_CASE標誌。

sort($array, SORT_FLAG_CASE); // Non-associative array 
asort($array, SORT_FLAG_CASE); // Associative array 
ksort($array, SORT_FLAG_CASE); // Associative array, sort by indices 

如果你有一箇舊版本,還沒有準備好更新(或不能),你可以使用natcasesort如其他人所說的,也是uasortksort變種strcasecmp作爲定製功能:

natcasesort($array);   // Non-associative array 
uasort($array, 'strcasecmp'); // Associative array 
uksort($array, 'strcasecmp'); // Associative array, sort by indices 

您可以將同樣的理念,任何其他sorting functions的。

+0

這個問題的正確答案是'''ksort($ data,SORT_FLAG_CASE | SORT_NATURAL);''' – 2015-11-10 14:41:06

0

可以使用uasort()http://php.net/manual/en/function.uasort.php

uasort($arr, 'strcasecmp'); 

第二個參數是一個函數,其比較值。該函數必須返回-1,0或1.這是一個模板,您可以將其用於自定義函數。

function cmp($a, $b) { 
    if ($a == $b) return 0; 
    elseif ($a > $b) return 1; 
    elseif ($a < $b) return -1; 
} 

uasort($arr, 'cmp'); 

排序後,您可能需要重置數組索引。

$arr = array_values($arr);