Вы можете использовать встроенные в PHP функции массива, чтобы сделать это, но внутренне они зацикливаются на самих значениях, так ли это допустимо?Один из способов - использовать array_filter
для результатов str_split
, а затем получить количество значений в результирующем массиве:
$str = 'hello world';
$cnt = count(array_filter(str_split($str), function ($v) { return ord($v) % 3 == 0; }));
echo $cnt;
Вывод
6
Вы также можете сделать что-то похожее с array_reduce
(это наиболее похоже на ваш существующий код):
$cnt = array_reduce(str_split($str), function ($c, $v) { return $c + (ord($v) % 3 == 0 ? 1 : 0); }, 0);
Демо на 3v4l.org