( Демо )
$text = ' Hello 20.04.2016 ? my incredibleness face?face is XYZ ';
Создание массива непрерывных видимых символов
$words = preg_split('/\s+/', $text, 0, PREG_SPLIT_NO_EMPTY);
array (
0 => 'Hello',
1 => '20.04.2016',
2 => '?',
3 => 'my',
4 => 'incredibleness',
5 => 'face?face',
6 => 'is',
7 => 'XYZ',
)
Замена видимых строк их многобайтовой длиной обратите внимание на более простой синтаксис
$wordsLength = array_map('mb_strlen', $words);
array (
0 => 5,
1 => 10,
2 => 1,
3 => 2,
4 => 14,
5 => 9,
6 => 2,
7 => 3,
)
Длина групп и счетчиков
$lengthCounts = array_count_values($wordsLength);
array (
5 => 1,
10 => 1,
1 => 1,
2 => 2,
14 => 1,
9 => 1,
3 => 1,
)
Establi sh массив значений по умолчанию, поскольку $lengthCounts
может иметь пробелы
$defaultCounts = array_fill_keys(range(1,10), 0);
array (
1 => 0,
2 => 0,
3 => 0,
4 => 0,
5 => 0,
6 => 0,
7 => 0,
8 => 0,
9 => 0,
10 => 0,
)
Отфильтруйте счетчики, чтобы удалить элементы / счетчики, выходящие за пределы диапазона
$filteredCounts = array_intersect_key($lengthCounts, $defaultCounts);
array (
5 => 1,
10 => 1,
1 => 1,
2 => 2,
9 => 1,
3 => 1,
)
Перезаписать значения по умолчанию найденными счетчиками, чтобы предотвратить пропуски в выходных данных
$gaplessCounts = array_replace($defaultCounts, $filteredCounts);
array (
1 => 1,
2 => 2,
3 => 1,
4 => 0,
5 => 1,
6 => 0,
7 => 0,
8 => 0,
9 => 1,
10 => 1,
)