PHP разбивает массивы на группы на основе значения одного поля - PullRequest
4 голосов
/ 16 апреля 2010

У меня есть массив, содержащий массивы имен и других деталей, в алфавитном порядке. Каждый массив содержит первую букву, связанную с именем.

Array
(
    [0] => Array
        (
            [0] => a
            [1] => Alanis Morissette
        )

    [1] => Array
        (
            [0] => a
            [1] => Alesha Dixon
        )
    [2] => Array
        (
            [0] => a
            [1] => Alexandra Burke
        )

    [3] => Array
        (
            [0] => b
            [1] => Britney Spears
        )

    [4] => Array
        (
            [0] => b
            [1] => Bryan Adams
        )
)

Я бы хотел отобразить их сгруппированные по первому инициалу, например:

A
-
Alanis Morissette
Alesha Dixon
Alexandra Burke

B
-
Britney Spears
Bryan Adams

etc...

Это вообще возможно?

Ответы [ 2 ]

12 голосов
/ 16 апреля 2010

Вы можете легко сгруппировать их, даже если они не отсортированы:

$groups=array();
foreach ($names as $name) {
    $groups[$name[0]][] = $name[1];
}

Вам даже не нужно хранить первый инициал для группировки:

$names = array(
  'Alanis Morissette',
  'Alesha Dixon',
  'Alexandra Burke',
  'Britney Spears',
  'Bryan Adams',
  ...
);

$groups=array();
foreach ($names as $name) {
    $groups[$name[0]][] = $name;
}
6 голосов
/ 16 апреля 2010

Поскольку ваш массив уже отсортирован, вы можете просто просмотреть и просмотреть последнюю отображаемую букву. Когда он меняется, вы знаете, что находитесь на следующей букве.

$lastChar = '';
foreach($singers as $s) {
    if ($s[0] != $lastChar) echo "\n".$s[0]."\n - \n";
    echo $s[1]."\n";
    $lastChar = $s[0];
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...