PHP根据一个字段的值将数组拆分成组

时间:2010-04-15 22:43:10

标签: php arrays sorting grouping

我有一个包含名称数组和其他详细信息的数组,按字母顺序排列。每个数组都包含与名称相关联的第一个字母。

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 个答案:

答案 0 :(得分:12)

您可以轻松地对它们进行分组,即使它们没有排序:

$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;
}

答案 1 :(得分:6)

由于您的数组已经排序,您可以循环浏览并跟踪显示的最后一个字母。当它发生变化时,你知道你正在接下来的那封信。

$lastChar = '';
foreach($singers as $s) {
    if ($s[0] != $lastChar) echo "\n".$s[0]."\n - \n";
    echo $s[1]."\n";
    $lastChar = $s[0];
}