У меня есть 2 массива, содержащие стартовые руки в покер-холдем.
Один из них состоит из неупорядоченных значений.
$array1 = array("65s","AA","J9s","AA","32s"); //the cards can be repeated here as you see there are 2 "AA"
и другой, который должен использоваться в качестве модели для заказа первого массива:
$array_sorted = array("AA","KK","AKs"...); //here the cards are not repeated
Я хотел бы переупорядочить $ array1 с сортировкой, используемой в $ array_sorted,
он должен возвращать массив вроде:
$array1 = array("AA","AA","J9s","65s","32s");
Я не знаю, как это сделать. Возможно, используя некоторый «пользовательский метод сортировки»? На самом деле не знаю.
Вы правы, и usort
– это «пользовательский метод сортировки», который вы ищете. Что-то вроде этого должно сработать для вас:
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' );