Как получить символ из mb_string через цикл for? - PullRequest
0 голосов
/ 17 марта 2019

С этим кодом:

$guessString = 'KUĆA';
$usedLetters = ['Ć'];
$userLetter = 'Ć';

for ($i = 0; $i < mb_strlen($guessString); $i++) {
    $temp = $guessString[$i];
    if (in_array($guessString[$i], $usedLetters)) {
        echo $guessString[$i];
    } else {
        echo ' _ ';
    }
}

Я пытаюсь сравнить, существует ли $ userLetter (который отправляется через ссылку GET) в $ guessString.

Но с помощью отладки:

enter image description here

Я наконец вижу, что он не правильно читает символ.

Он получает "?" вместо "Ć"

Итак, мой вопрос: как получить правильный символ для цикла for ($ guessString [$ i])?

1 Ответ

1 голос
/ 17 марта 2019

Ваша проблема с

$guessString[$i]

Оператор индексирования не поддерживает многобайтовый режим, поэтому он возвращает $i th байт строки.Один из способов исправить это - использовать mb_substr:

$temp = mb_substr($guessString, $i, 1);

. Конечно, вам следует использовать $temp везде, где вы использовали $guessString[$i].

...