2014-09-18 89 views
0

忽略特殊字符我有一個​​數組:排序數組中的PHP

Array (
     '9:00', 
     '22:00', 
     '12:00', 
     '*15:00' 
) 

我想作爲排序是這樣的:

Array (
     '9:00', 
     '12:00', 
     '*15:00', 
     '22:00' 
)

這可能嗎?我試圖忽略數組中的星號進行排序,但星號保留在元素中。

+0

是在15錯字前面的星號?還是意味着在那裏?數據集中是否還有其他這樣的字符? – lxg 2014-09-18 18:37:07

+1

如果你想保留星號,那麼你可能需要編寫自己的排序功能。到目前爲止,沒有內置的功能來做到這一點。 – 2014-09-18 18:38:32

+0

如果您擁有*之前的內容,則無法在PHP中進行本地排序。你需要創建一個函數去除主要的特殊字符,使用natcasesort(可能是這裏最好的),然後引用原始數組的鍵來獲得真正的值。 – 2014-09-18 18:38:50

回答

1

如何:

$foo = array('9:00', '22:00', '12:00', '*15:00'); 

usort($foo, function($a, $b) { 
    $a = preg_replace('|[^\d:]|', '', $a); 
    $b = preg_replace('|[^\d:]|', '', $b); 

    return strnatcmp($a, $b); 
}); 

print_r($foo); 

輸出:

Array 
(
    [0] => 9:00 
    [1] => 12:00 
    [2] => *15:00 
    [3] => 22:00 
) 
+0

對不起!我之前並不欣賞,但你的答案完美無缺。謝謝 – 2014-09-25 15:14:40