<?php
$items = array(
'Алтайкский край',
'Амурская область',
'Архангельская область',
'Астраханская область',
'Белгородская область',
'Брянская область',
'Владимирская область',
'Волгоградская область ',
);
$blocks = array();
foreach ($items as $item) {
$blocks[mb_substr($item, 0, 2)][] = $item;
}
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
p {
font-family: Arial, Helvetica, sans-serif;
font-size: 90%;
}
P:first-letter {
font-family: "Times New Roman", Times, serif;
font-size: 200%;
color: red;
}
</style>
</head>
<body>
<div>
<?php var_dump($blocks);?>
<?php foreach ($blocks as $items) : ?>
<p>
<?php foreach ($items as $item) : ?>
<?php echo $item; ?><br/>
<?php endforeach; ?>
</p>
<?php endforeach; ?>
</div>
</body>
</html>
Я не знаю что там у тебя с кодировкой, но почему первый символ нужно выбирать 2ой длиной, хотя по правильному это нужно делать длиной равной 1.
Я про эту строчку
$blocks[mb_substr($item, 0, 2)][] = $item;
Если бы кодировка был UTF-8, то нужно было бы сделать так
$blocks[mb_substr($item, 0, 1)][] = $item;
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации