2016-08-30 26 views
1

Iが第二文字で次の配列をソートしたい[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]文字です。しかし、当然、D1(例えば)の後に来ないので、いくつかの操作を行う必要があります。文字列の2番目の文字が同じ場合は、辞書的に並べ替える、つまり結果を返すだけです(たとえば、base_convertを使用して整数に変換することで、この文字を16進数として扱う) 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

次の関数は、私のために働いたがそれはから取られたと私は唯一の「[1]」を追加する必要がありました:http://www.w3schools.com/php/showphp.asp?filename=demo_func_usort

Rizier123に感謝します。

function my_sort($a,$b){ 
    if ($a[1]==$b[1]) return 0; 
    return ($a[1]<$b[1])?-1:1; 
} 

usort($_SESSION['kartenstapel'],"my_sort"); 
1

すべてが2文字なので、各文字列の逆を比較するだけで並べ替えることができます。

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