使用与另一个相同的顺序对数组进行排序

时间:2012-01-16 19:43:43

标签: php arrays sorting

我有两个包含起始扑克hold'em手的阵列。

一个由无序值组成。

$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

我想用$ array_sorted中使用的排序重新订购$ array1,

它应该返回一个数组:

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

我完全不知道如何做到这一点。也许通过使用一些“用户定义的排序方法”?真的不知道。

1 个答案:

答案 0 :(得分:7)

你是对的,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' );