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

5

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

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)
等等...

这个有可能吗?

2个回答

13

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

$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

由于你的数组已经排序,因此你可以遍历数组并跟踪显示的最后一个字母。当它改变时,你就知道你正在处理下一个字母。

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

我想补充一下,你可以使用substr()轻松获取第一个字母。除非你有其他原因需要使用多维数组,否则一个普通的包含名称的数组就可以轻松完成你要做的事情。我的观点是,如果多维数组让你感到困惑,那么你可能需要重新考虑如何组合它。 - Syntax Error
@语法错误:或者您可以像zombat和我一样使用数组括号(http://php.net/manual/en/language.types.string.php#language.types.string.substr)。 - outis
哎呀...不知道我怎么会错过那个。唉。 - Syntax Error

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接