Сравнение инкрементных строк
Так что это довольно сложно сформулировать вопрос по моей проблеме, поэтому просто представьте, что я собираюсь объяснить,
Изображение у вас есть список из нескольких строк, содержащих символы от 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";
}
3 answers
Это, скорее всего, сработает:
$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;
}
Не очень красиво, но я думаю, что это будет работать для любой длины строки.
Здесь вы объединяете числовые значения букв в строке и возвращаете их для сравнения в виде числа.
Я бы попытался написать какую-нибудь функцию для преобразования 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;