- Разделить каждое число на массив из 4 элементов.
(array_map('str_split', $numbers)
) - Транспонировать новую многомерную структуру, IOW - преобразовать столбцы в строки.
( array_map(null, ...#1)
) - Подсчитайте значения.
(array_map('array_count_values', #2)
Однострочник:
array_map('array_count_values', array_map(null, ...array_map('str_split', $numbers)))
Код: ( Демо )
var_export(
array_map(
'array_count_values',
array_map(
null,
...array_map(
'str_split',
$numbers
)
)
)
);
Или, если вы предпочитаете языковые конструкции, это может быть легче понять ...
Код: ( Демо )
$result = [];
foreach ($numbers as $number) {
foreach (str_split($number) as $index => $digit) {
$result[$index][$digit] = ($result[$index][$digit] ?? 0) + 1;
}
}
var_export($result);
Вывод (из обоих фрагментов):
array (
0 =>
array (
8 => 2,
1 => 1,
6 => 2,
3 => 1,
7 => 2,
9 => 1,
2 => 1,
),
1 =>
array (
3 => 1,
6 => 1,
8 => 3,
5 => 3,
2 => 1,
0 => 1,
),
2 =>
array (
5 => 3,
1 => 1,
8 => 1,
9 => 2,
3 => 1,
2 => 1,
7 => 1,
),
3 =>
array (
3 => 1,
9 => 2,
0 => 1,
6 => 1,
4 => 2,
7 => 1,
8 => 1,
5 => 1,
),
)