2016-08-30 2 views
1

I 번째 문자 [1] (D 1)의 다음과 같은 배열을 정렬하고 싶습니다 :

$_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 (예 :) 뒤에 나오지 않으므로 일부 조작을해야합니다. 깔끔한 속임수는이 문자를 16 진수로 취급하는 것입니다 (예 : 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

모두 2 자이기 때문에 각 문자열의 반대를 비교하여 정렬 할 수있는 것처럼 보입니다.

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