2014-10-31 71 views
0

我有一個簡單的數組。目標是,按鍵排序。按鍵排序數組(鍵是字符串)

$someUnsortedArray = array("140/142" => "FirstValue", "118/120" => "SecondValue", "122/124" => "ThirdValue", "40/42" => "FourthValue"); 

ksort($someUnsortedArray); 

我的輸出:

array (size=4) 
    '118/120' => string 'SecondValue' 
    '122/124' => string 'ThirdValue' 
    '140/142' => string 'FirstValue' 
    '40/42' => string 'FourthValue' 

預期輸出:

array (size=4) 
'40/42' => string 'FourthValue' 
'118/120' => string 'SecondValue' 
'122/124' => string 'ThirdValue' 
'140/142' => string 'FirstValue' 

是什麼在PHP函數我正在尋找?

回答

5

你可以在這種情況下使用uksort()

$someUnsortedArray = array("140/142" => "FirstValue", "118/120" => "SecondValue", "122/124" => "ThirdValue", "40/42" => "FourthValue"); 

uksort($someUnsortedArray, function($a, $b){ 
    $a = str_replace('/', '', $a); 
    $b = str_replace('/', '', $b); 
    return $a - $b; 
}); 

echo '<pre>'; 
print_r($someUnsortedArray); 
+0

在理論上這是可行的。但有沒有更換任何解決方案「 /「沒有任何東西? – Tyralcori 2014-10-31 13:18:16

+0

@Tyralcori你需要對它進行自定義排序,因爲如果要將它們作爲字符串進行比較,你將無法得到所需的值 – Ghost 2014-10-31 13:19:41

+0

@Tyralcori如果你不想要替換,你可能會爆炸它 – Ghost 2014-10-31 13:20:34

2

檢查PHP手冊:

http://php.net/manual/en/function.ksort.php

使用ksort()SORT_NUMERIC標誌。

$someUnsortedArray = array("140/142" => "FirstValue", "118/120" => "SecondValue", "122/124" => "ThirdValue", "40/42" => "FourthValue"); 
ksort($someUnsortedArray, SORT_NUMERIC); 

echo '<pre>'; 
print_r($someUnsortedArray); 

Sample Output

+0

Tyralcori已經嘗試過ksort;) – Veve 2014-10-31 13:17:47

+0

那麼SORT_NUMERIC – 2014-10-31 13:21:54

+0

「40/42」或「118/120」是不是數字值,它們是字符串。 – Veve 2014-10-31 13:28:04

0

結果預期的行爲,因爲如果你排序字符串中字母順序1 *始終是4 *前。

如果你想讓它按照數字排序,你必須分割你的字符串,將元素轉換爲數字並按數字排序。

實施取決於您想要達到的目標。只是一個關鍵列表?然後你可以迭代一個foreach循環,例如按下鍵。

不會有「開箱即用」的PHP函數。

2

作爲替代方案,你也可以使用自然順序字符串比較功能來比較鍵

function sortKey($a, $b) { 
    return strnatcmp($a, $b); 
} 

uksort($someUnsortedArray,"sortKey"); 
0
$someUnsortedArray = array("5/142" => "FirstValue", "118/120" => "SecondValue", "122/124" => "ThirdValue", "40/42" => "FourthValue"); 

uksort($someUnsortedArray, function($a, $b) { 
    // to avoid manipulating them as a string ....  
    return ((float)$a)-((float)$b); 
}); 
var_dump($someUnsortedArray);