1

4 つの値があると仮定します。

$right 
$down
$left
$up

そして、4つの中からベストを選びたい。値はfalse01-9、またはのいずれかDです。

False は最悪、0 は 2 番目、1 から 9 までさまざまです。明らかに 9 が最高、最後に D が最高です (2 倍のスタンド)。

PHPでこれを確認する最良の方法は何ですか? すべての変数で最初に D をチェックすることを考えていました。D がない場合は、4 つすべての中で最大の数を探し、次に 0 を探し、最後に false を探します。

ありがとう。

4

3 に答える 3

2

up、、、または最後の結果downに関心があるように思われるので、それらを「強度」値とペアにした配列のとして保持し、単純に並べ替えるのが理にかなっています。ラフでテストされていないドラフト:leftright

$values = array(
    array('type' => 'right', 'value' => false),
    array('type' => 'down',  'value' => 3)
    ...
);

usort($values, function ($a, $b) {
    static $order = array(false, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'D');

    $a = array_search($a['value'], $order, true);
    $b = array_search($b['value'], $order, true);
    return $a - $b;
});
于 2012-05-22T01:32:29.983 に答える
0

これはあなたが探している答えをあなたに与えるはずです。

$test['up'] = false;
$test['down'] = 4;
$test['left'] = 'D';
$test['right'] = 0;

// for display only
print_r($test);

asort($test,SORT_STRING);

// for display only
print_r($test);

// Array key of the last value in array / best
echo array_pop(array_keys($test));
于 2012-05-22T01:46:48.583 に答える
0

最初にそれを配列に変換します(compact()そのために使用するか、最初から配列に格納するだけです)。次にuasort()、ユーザー定義の比較関数で使用できます。

function myCompare($a, $b)
{
    // Convert false and D to -1 and 10, respectively.
    $a = ($a === false ? -1 : ($a == 'D' ? 10 : $a));
    $b = ($b === false ? -1 : ($b == 'D' ? 10 : $b));

    return ($b - $a);
}

$arr = compact('right', 'down', 'left', 'up');

uasort($arr, 'myCompare');

または、PHP 5.3 以降では、クロージャーを使用できます。

$arr = compact('right', 'down', 'left', 'up');

uasort($arr, function ($a, $b) {
    // Convert false and D to -1 and 10, respectively.
    $a = ($a === false ? -1 : ($a == 'D' ? 10 : $a));
    $b = ($b === false ? -1 : ($b == 'D' ? 10 : $b));

    return ($b - $a);
});
于 2012-05-22T01:39:43.017 に答える