字符串比较ANYmax> = ANYmin

时间:2012-12-06 12:52:33

标签: php string

使用字符串函数和一大堆if-else会把它变成真正的混乱? 将字符串转换为十六进制数组可能是另一种方式? 看来正则表达式可能与它有关吗? 也许这里的一位专家可以指导我做一些有意义的事情?

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

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

可以是任何字符[a-z,0-9,A-Z]

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

示例:'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;
        }

1 个答案:

答案 0 :(得分: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);
        }
    }
    
  4. 回顾一下:

    // 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;
        }
    }