【问题标题】:PHP splitting arrays into groups based on one field's valuePHP 根据一个字段的值将数组分组
【发布时间】:2010-04-16 06:53:17
【问题描述】:

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

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

我想按第一个首字母分组显示它们,例如:

一个
-
阿兰尼斯·莫里塞特
阿莱莎狄克逊
亚历山德拉·伯克

乙
-
布兰妮·斯皮尔斯
布莱恩·亚当斯

等等……

这可能吗?

【问题讨论】:

    标签: php arrays sorting grouping


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      由于您的数组已经排序,您可以循环并跟踪显示的最后一个字母。当它发生变化时,您就知道您在下一个字母上。

      $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: 或者你可以使用数组括号 (php.net/manual/en/…),就像我和 zombat 一样。
      • 糟糕...不知道我是怎么错过的。德普。
      猜你喜欢
      • 1970-01-01
      • 2013-12-04
      • 2016-02-20
      • 2015-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      相关资源
      最近更新 更多