0

使用字符串函数和大量的 if-else 会使这变得一团糟?将字符串转换为十六进制数组可能是另一种方式?似乎正则表达式可能与它有关?也许这里的一位专家可以指导我做一些有意义的事情?

可能的 $min 和 $max 总是相似的。

$min 是一个存储变量。$max 是客户端输入。

可以是任何字符 [az, 0-9, AZ]

由单个空格分隔的字符对。

示例:'p1'、'1 1'、'p1 h11'、'P3 h2'...

期望结果:ANY $max >= ANY $min

例子:

$minA = 'p1 p2 h3'; $maxA = 'h2'; // false h2<=h3
$minB = '1 2 3'; $maxB = '4'; // true 4>=3
$minC = 'P2 p3'; $maxC = 'p2'; // true p2>=P2
$minD = 'p2 H33'; $max = 'p1 H34 y2'; // true H34>=H33

这是它的工作原理---感谢您的帮助

        $min = 'p1 h3 t3'; 
        $max = 'p1 h2';
        echo ratingCheck($max, $min);

        function ratingCheck($max, $min)
        {
            $minRank = strConv($min);
            $maxRanks =strConv($max);

            foreach ($maxRanks as $letter => $value)
            {
                echo ($value >= $minRank[$letter]) ? ' true ' : ' false ';
            }   
        }
        function strConv($str)
        {
            $exploded = explode(' ', $str);
            foreach ($exploded as $rating)
            {
                 preg_match('`([a-z]+)(\d+)`', $rating, $m);var_dump($m);
                 list(, $rating_letter, $rating_rank) = $m;
                 if (!isset($ratings[$rating_letter]))
                 {
                      $ratings[$rating_letter] = $rating_rank;
                 }
                 else
                 {
                      // for $min you should keep the highest value : max()
                      // for $max you should keep the lowest value : min()
                      $ratings[$rating_letter] = max($ratings[$rating_letter], $rating_rank);
                 }
            }
            return $ratings;
        }
4

1 回答 1

1

所以根据我的理解。

  1. 您不关心大小写,首先将所有内容都放在小写/大写中。

  2. 在“空格字符”上拆分每个 $min 和 $max。

    explode(' ', 'p1 p2 h3') == array('p1', 'p2', 'h3);

  3. 将每个字母的最低/最高评级存储在一个数组中。

    $ratings = array();
    foreach ($exploded as $rating)
    {
        preg_match('`([a-z]+)(\d+)`', $rating, $m);
        list(, $rating_letter, $rating_rank) = $m;
        if (!isset($ratings[$rating_letter]))
        {
            $ratings[$rating_letter] = $rating_rank;
        }
        else
        {
            // for $min you should keep the highest value : max()
            // for $max you should keep the lowest value : min()
            $ratings[$rating_letter] = max($ratings[$rating_letter], $rating_rank);
        }
    }
    

在这一点上回顾一下:

// If you had
$min = 'p1 p2 h3';
// Then you end up with an array like this:
$minRanks = array(
    'p' => 2,
    'h' => 3,
);


// If you had
$max = 'h2';
// Then you end up with an array like this:
$maxRanks = array(
    'h' => 2,
);

4-然后您需要遍历 $max 以检查是否有任何评级高于任何 $min

foreach ($maxRanks as $letter => $value)
{
    if ($value >= $minRank[$letter])
    {
        return true;
    }
}
于 2012-12-06T14:59:08.923 回答