Сортировать массив, используя тот же порядок другого - PullRequest
5 голосов
/ 16 января 2012

У меня есть 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");

Я понятия не имею, как этого добиться. Может быть, используя какой-то "метод сортировки, определенный пользователем"? На самом деле не знаю.

1 Ответ

7 голосов
/ 16 января 2012

Вы правы, а 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 </p>

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' );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...