Подсчитать количество символов в строке, код ASCII которых кратен числу 3, без использования цикла или рекурсии - PullRequest
1 голос
/ 13 апреля 2019

У меня есть следующий код PHP, который использует foreach и дает правильный счет. Это то, что я пробовал с циклом.

$str = 'hello world';
$cnt = 0;

$arr = str_split($str);
foreach($arr as $val){
  if( ord($val)%3 == 0 ){
   $cnt++;
  }
}
echo 'total count- '.$cnt; //count is 6 here which is correct

Есть ли способ сделать то же самое в PHP без использования циклов или рекурсии?

1 Ответ

2 голосов
/ 13 апреля 2019

Вы можете использовать встроенные в 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...