0

文字列関数と多数の if-else を使用すると、これが本当に混乱しますか? 文字列を16進配列に変換するのは別の方法でしょうか? 正規表現が何か関係があるようですか?ここにいる専門家の 1 人が、意味のあることを教えてくれるのではないでしょうか?

可能な $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 に答える