2012-01-16 4 views
5

Tengo 2 matrices que contienen las manos de poker hold'em inicial.Ordenar una matriz usando el mismo orden que la de otra

Uno se compone de valores desordenados.

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

y el otro que se debe utilizar como un modelo para ordenar la primera matriz:

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

me gustaría volver a pedir $ array1 con el tipo usado en $ array_sorted,

debe devolver una matriz como:

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

tengo totalmente ninguna idea sobre cómo lograr esto. ¿Tal vez usando algún "método de clasificación definido por el usuario"? Realmente no lo se.

+0

No estoy seguro de entender. ¿No solo quieres Asort? http://us2.php.net/manual/en/function.asort.php – MetalFrog

+0

No creo que asort() haga el truco, necesito ordenar $ array1 usando el orden en $ array_sorted. – KingBOB

+0

Ah, ya entendiste, querrías que nos dieras. http://us2.php.net/usort – MetalFrog

Respuesta

7

Tienes razón, y usort es el "método de clasificación definido por el usuario" que estás buscando. Algo como esto se debe trabajar para usted:

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

Lo estoy probando, pero como lo estoy utilizando en un método de una clase, devuelve este error: Error de análisis: error de sintaxis, T_FUNCTION inesperado en /Applications/MAMP/www/class2.php en la línea 1312 – KingBOB

+0

What versión de PHP está ejecutando? – afuzzyllama

+0

Estoy usando 5.2.6 – KingBOB

Cuestiones relacionadas