Сравнение инкрементных строк


Так что это довольно сложно сформулировать вопрос по моей проблеме, поэтому просто представьте, что я собираюсь объяснить,

Изображение у вас есть список из нескольких строк, содержащих символы от 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";
}
Author: TheSpartaPT, 2018-07-17

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;
}

Не очень красиво, но я думаю, что это будет работать для любой длины строки.

Здесь вы объединяете числовые значения букв в строке и возвращаете их для сравнения в виде числа.

 0
Author: NappingRabbit, 2018-07-17 11:18:45

Я бы попытался написать какую-нибудь функцию для преобразования 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') {...

 1
Author: Eakethet, 2018-07-17 10:51:40

Создайте массив всех ваших писем.. тогда эта проблема становится тривиальной:)

$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;
 0
Author: Dale, 2018-07-17 10:57:40