使用字符串函数和一大堆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;
}
答案 0 :(得分:1)
所以根据我的理解。
你不关心案件,首先把一切都放在大写/小写的情况下。
在'空格字符'上拆分每个$ min和$ max。
explode(' ', 'p1 p2 h3') == array('p1', 'p2', 'h3);
存储数组中每个字母的最低/最高评级。
$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;
}
}