比较增量字符串
Compare incremental strings
所以很难形成关于我的问题的问题所以请想象一下我要解释的内容,
image 你有一个包含多个字符串的列表,其中包含从 A 到 Z 的字符,在 Z 之后是 AA、AB、AC 等...
我想在列表中排名最高,因为我正在尝试做这样的事情:
$max_letter = "A";
while($row = mysqli_fetch_assoc($recordset)) {
if($row["new_letter"] > $max_letter) {
$max_letter = $row["new_letter"];
}
}
问题在于,当 $row["new_letter"]
等于 "AA"
且 $max_letter
等于 "Z"
时,它不会将 $max_letter
更新为"AA"
因为它认为 "Z"
高于 "AA"
但如果我这样做:
$str = "Z";
echo ++$str;
我的输出将是
AA
我的问题示例:
$str = "Z";
echo ++$str;
echo "<br><br>";
if("AA" > "Z") {
echo "higher";
}elseif("AA" == "Z") {
echo "equal";
}elseif("AA" < "Z") {
echo "lower";
}
我会尝试编写一些函数将 char val 转换为 int val
<?php
//echo ord('A') - 64;
// so base is -64
// 26 chars
// read from beggining
$value = 0;
// 27 in charval
$charVal = 'AA';
$len = strlen($charVal);
$i = 0;
while ($i < $len) {
if ($value != 0) {
$value *= 26;
}
$value += ord($charVal[$i]) - 64;
$i++;
}
echo $value;
所以你让它运行并调用 if (charToInt('AA') > charToInt('Z') {...
构建一个包含所有字母的数组..然后这个问题就变得微不足道了:)
$maxLetters = ['a', 'b', 'c', 'z', 'aa'];
natsort($maxLetters);
echo array_pop($maxLetters) . ' is the highest letter';
我会尽力满足您的需求
$maxLetters = [];
while($row = mysqli_fetch_assoc($recordset)) {
$maxLetters[] = $row['new_letter'];
}
natsort($maxLetters);
$highestLetter = array_pop($maxLetters);
echo $highestLetter;
这可能有效:
$max_letter = "A";
while($row = mysqli_fetch_assoc($recordset)) {
if(cvrt($row["new_letter"]) > cvrt($max_letter)) {
$max_letter = $row["new_letter"];
}
}
function cvrt(incStr){
$ret = "";
foreach(str_split(incStr) as $v){
$ret .= ord($v);
}
return $ret;
}
不太好,但我认为它适用于任何长度的字符串。
您在这里所做的是连接字符串中字母的数值并将它们返回以作为数字进行比较。
所以很难形成关于我的问题的问题所以请想象一下我要解释的内容,
image 你有一个包含多个字符串的列表,其中包含从 A 到 Z 的字符,在 Z 之后是 AA、AB、AC 等...
我想在列表中排名最高,因为我正在尝试做这样的事情:
$max_letter = "A";
while($row = mysqli_fetch_assoc($recordset)) {
if($row["new_letter"] > $max_letter) {
$max_letter = $row["new_letter"];
}
}
问题在于,当 $row["new_letter"]
等于 "AA"
且 $max_letter
等于 "Z"
时,它不会将 $max_letter
更新为"AA"
因为它认为 "Z"
高于 "AA"
但如果我这样做:
$str = "Z";
echo ++$str;
我的输出将是
AA
我的问题示例:
$str = "Z";
echo ++$str;
echo "<br><br>";
if("AA" > "Z") {
echo "higher";
}elseif("AA" == "Z") {
echo "equal";
}elseif("AA" < "Z") {
echo "lower";
}
我会尝试编写一些函数将 char val 转换为 int val
<?php
//echo ord('A') - 64;
// so base is -64
// 26 chars
// read from beggining
$value = 0;
// 27 in charval
$charVal = 'AA';
$len = strlen($charVal);
$i = 0;
while ($i < $len) {
if ($value != 0) {
$value *= 26;
}
$value += ord($charVal[$i]) - 64;
$i++;
}
echo $value;
所以你让它运行并调用 if (charToInt('AA') > charToInt('Z') {...
构建一个包含所有字母的数组..然后这个问题就变得微不足道了:)
$maxLetters = ['a', 'b', 'c', 'z', 'aa'];
natsort($maxLetters);
echo array_pop($maxLetters) . ' is the highest letter';
我会尽力满足您的需求
$maxLetters = [];
while($row = mysqli_fetch_assoc($recordset)) {
$maxLetters[] = $row['new_letter'];
}
natsort($maxLetters);
$highestLetter = array_pop($maxLetters);
echo $highestLetter;
这可能有效:
$max_letter = "A";
while($row = mysqli_fetch_assoc($recordset)) {
if(cvrt($row["new_letter"]) > cvrt($max_letter)) {
$max_letter = $row["new_letter"];
}
}
function cvrt(incStr){
$ret = "";
foreach(str_split(incStr) as $v){
$ret .= ord($v);
}
return $ret;
}
不太好,但我认为它适用于任何长度的字符串。
您在这里所做的是连接字符串中字母的数值并将它们返回以作为数字进行比较。