2016-08-30 125 views
1

我想在第二符[1](1至d)以下數組進行排序:

$_SESSION['kartenstapel']=array(
       '11','12','13','14','15','16','17','18','19','1A','1B','1C','1D', 
       '21','22','23','24','25','26','27','28','29','2A','2B','2C','2D', 
       '31','32','33','34','35','36','37','38','39','3A','3B','3C','3D', 
       '41','42','43','44','45','46','47','48','49','4A','4B','4C','4D', 
       '51','52','53','54','55','56','57','58','59','5A','5B','5C','5D', 
       'W1','W2','W3','W4','W5','W6','W7','W8','W9','WA','WB','WC','WD' 
); 

理想輸出將是以下情況:

$_SESSION['kartenstapel']=array(
       '11','21','31','41','51','W1','12','22','32','42','52','W2','13'... 
+1

使用'usort()'並應用您的自定義排序功能。 – Rizier123

+0

它的工作原理!謝謝你指出! – Alexander

回答

1

可以使用usort函數來傳遞自己的自定義比較功能。

這裏有幾件事要記住。你需要比較的第一件事是[1]字符。但是,D自然不會在1之後出現,因此您需要進行一些操作。一個簡單的技巧就是把這個字符當作一個十六進制數字(例如,通過使用base_convert並將它轉換爲一個整數);其次,如果兩個字符串的第二個字符都相同,那麼您希望按照字典順序排序,即只返回結果從strcmp當你把它放在一起,你會得到這樣的:我

usort($_SESSION['kartenstapel'], function ($a, $b) { 
    $cmp = base_convert($a[1], 16, 10) - base_convert($b[1], 16, 10); 
    if ($cmp != 0) { 
     return $cmp; 
    } 
    return strcmp($a, $b); 
}); 
+1

非常感謝您的好解釋!我將使用你的功能。 :) – Alexander

1

由於它們都只有兩個字符,因此您可以通過比較每個字符串的反轉來進行排序。

usort($_SESSION['kartenstapel'], function($a, $b) { 
    return strcmp(strrev($a), strrev($b)); 
});