使用字符串函数和大量的 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;
}