Добрый день! Я новичок и не могу понять почему код не работает?
Не могу самостоятельно разобраться почему в первом случае код не работает. Припопытке использовать эту функцию и посчитать количество уникальных символов в $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предоставляет простой способ перебора массивов.
