2012-01-16 7 views
5

Mam 2 tablice zawierające początkowe ręce pokera hold'em.Sortowanie tablicy za pomocą tej samej kolejności od innej

Jedna składa się z nieuporządkowanych wartości.

$array1 = array("65s","AA","J9s","AA","32s"); 
//the cards can be repeated here as you see there are 2 "AA" 

a drugi, który powinien być używany jako model na zamówienie pierwszej tablicy:

$array_sorted = array("AA","KK","AKs"...); 
//here the cards are not repeated 

Chciałbym zmienić kolejność $ array1 z rodzaju stosowanych w $ array_sorted,

powinien zwracać tablicę jak:

$array1 = array("AA","AA","J9s","65s","32s"); 

mam kompletnie pojęcia, w jaki sposób tego dokonać. Może używając "metody sortowania zdefiniowanej przez użytkownika"? Naprawdę nie wiem.

+0

Nie jestem pewien, czy rozumiem. Czy nie chcesz tylko asortymentu? http://us2.php.net/manual/en/function.asort.php – MetalFrog

+0

Nie sądzę, że asort() mógłby załatwić sprawę, muszę posortować tablicę $ array1, używając polecenia w $ array_sorted. – KingBOB

+0

Ach, musisz, chcesz wtedy usortować. http://us2.php.net/usort – MetalFrog

Odpowiedz

7

Masz rację, a usort to "zdefiniowana przez użytkownika metoda sortowania", której szukasz. Coś jak to powinno działać dla Ciebie:

PHP> = 5,3

// Firstly this will be faster if the hands are the keys in the array instead 
// of the values so we'll flip them with array_flip. 
$array_sorted = array_flip(array('AA', 'KK', 'AKs', /* ... */)); 
// => array('AA' => 0, 'KK' => 1, 'AKs' => 2, ...) 

// your hands 
$array1 = array('65s', 'AA', 'J9s', 'AA', '32s'); 

$array1_sorted = usort(
    $array1, 

    // The comparison function 
    function($a, $b) { 
    // If $a is AA and $b is J9s then 
    // $array_sorted[ 'AA' ] - $array_sorted[ 'J9s' ] 
    // will evaluate to a negative number, telling PHP that $a (AA) 
    // is "smaller" than $b (J9s) and so goes first. 
    return $array_sorted[ $a ] - $array_sorted[ $b ]; 
    } 
); 

PHP < 5,3

function sorting_function($a, $b){ 
    $array_sorted = array_flip(array('AA', 'KK', 'AKs', /* ... */)); 

    return $array_sorted[ $a ] - $array_sorted[ $b ]; 
} 

$array1 = array('65s', 'AA', 'J9s', 'AA', '32s'); 

$array1_sorted = usort($array1, 'sorting_function'); 
+0

Testuję to, ale ponieważ używam go do metody klasy, zwraca ten błąd: Błąd parsowania: błąd składni, nieoczekiwany T_FUNCTION w /Aplikacje/MAMP/www/class2.php na linii 1312 – KingBOB

+0

Co wersja PHP jest uruchomiona? – afuzzyllama

+0

Używam 5.2.6 – KingBOB

Powiązane problemy