Добрый день! Я новичок и не могу понять почему код не работает?

Не могу самостоятельно разобраться почему в первом случае код не работает. Припопытке использовать эту функцию и посчитать количество уникальных символов в $text = "qwew", я получаю "0"?

function countUniqChars($text)
    {
        $uniqChars = [];
    
        foreach ($text as $char) {
            if (!in_array($char, $uniqChars)) {
                $uniqChars[] = $char;
               
            }
        }
        return count($uniqChars);
    }
print_r(countUniqChars($text));

Во втором варианте функция отлично работает. $text = "qwew", я получаю "3".

function countUniqChars($text)
{
    $uniqChars = [];

    for ($i = 0; $i < strlen($text); $i ++) {
        if (!in_array($text[$i], $uniqChars)) {
            $uniqChars[] = $text[$i];
        }
    }
    return count($uniqChars);
}
print_r(countUniqChars($text));

Ответы (1 шт):

Автор решения: Алексей Шиманский

Скорее всего нужно над переменной $text произвести манипуляцию в виде разбивки на символы str_split и только потом делать цикл

$chars = str_split($text);

foreach ($chars as $char....

UPD

Во втором варианте функция отлично работает. $text = "qwew", я получаю "3".

Надо понимать, что не смотря на то, что к символу строки можно обратиться через квадратные скобки, как в случае с массивом, сама строка не является массивом (см. Документацию по типам данных), это разные типы данных. Потому методы работы с массивом не подходят для работы со строками. Нужно применять функции работы со строками, как в примере, что приведён в самом начале. А также итерация в foreach происходит один раз и берёт сразу всю строку именно потому, что

Конструкция foreach предоставляет простой способ перебора массивов.

введите сюда описание изображения

→ Ссылка