PHP评估变量寻找最适合

时间:2012-05-22 01:24:14

标签: php

假设我有四个值:

$right 
$down
$left
$up

我想选择四个中最好的。值可以是false01-9D

假是最差,0是秒,1-9明显变化9最好,最后D是最好的(立场加倍)。

在PHP中检查这个的最佳方法是什么?我想在所有变量中首先检查D。如果没有D,那么查找所有四个中的最高数字,然后查找0,最后查找false。

感谢。

3 个答案:

答案 0 :(得分:2)

在我看来,你最后对updownleftright的结果感兴趣,所以它有意义将这些保存在与其“强度”值配对的数组中,然后对它们进行排序。粗糙,未经检验的草案:

$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;
});

答案 1 :(得分: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);
});

答案 2 :(得分: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));