【问题标题】:echo multidimensional array by grouping php通过分组php回显多维数组
【发布时间】:2016-06-20 10:41:45
【问题描述】:
$list = array(
        array(
        'header_name' => '1.',
        'header_database_name' => '2',
        'heading' => 'personal',
        ),

        array(
        'header_name' => '11. ',
        'header_database_name' => '22',
        'heading' => 'professional',        
        ),

        array(
        'header_name' => '33',
        'header_database_name' => '333',
        'heading' => 'personal',    
        ),
    );

foreach($list as $li) {
?>
"> ';} else ($li['heading'] == '表现') {echo $li['header_name'].'
';}
}

我需要通过标题对它进行分组来打印这个数组,例如标题为个人的那个应该显示在个人标题下,即:

 Personal
    1
    33
    Professional
    11

我的php代码是这样的

foreach($list as $li) {
?>
"> ';} else ($li['heading'] == '表现') {echo $li['header_name'].'
';}
}

它是按组打印的,但我还需要添加标题,但只需要在顶部添加一次,例如现在如果我向它添加标题,它会打印为个人 1 专业 2 个人 3

但我需要 个人的 1 2 专业的 2

【问题讨论】:

  • 添加您的 PHP 代码和预期的输出。
  • Presonal 1 33 - 奇怪的输出,你能详细说明一下吗?

标签: php arrays multidimensional-array


【解决方案1】:

如果要对数据进行分组,则需要对数组进行排序,请使用usort

function headingSort ($x, $y) {
    return strcasecmp($x['heading'], $y['heading']);
}

usort($myArray, 'headingSort');

【讨论】:

    【解决方案2】:

    像这样使用

    $new_array = array();
    foreach($list as $k=>$v)
    {
        if(!in_array($v['header_name'], $new_array))
            $new_array[$v['heading']][] = $v['header_name'];
        else
            $new_array[$v['heading']] = $v['header_name'];
    }
    print_r($new_array);
    

    【讨论】:

      【解决方案3】:

      试试这个:

      $list = array(
          array(
          'header_name' => '1.',
          'header_database_name' => '2',
          'heading' => 'personal',
          ),
          array(
          'header_name' => '11. ',
          'header_database_name' => '22',
          'heading' => 'professional',        
          ),
          array(
          'header_name' => '33',
          'header_database_name' => '333',
          'heading' => 'personal',    
          )
      );
      
      $personal = array();
      $professional = array();
      
      for($i=0;$i<count($list);$i++){
          if($list[$i]['heading']=="professional"){
              array_push($professional,$list[$i]);
          }else{
              array_push($personal,$list[$i]);
          }
      }
      $new = array(
              "personal"=>$personal,
              "professional"=>$professional
          );
      echo "<pre>";
      print_r($new);
      

      结果会是这样的:

      Array
      (
      [personal] => Array
          (
              [0] => Array
                  (
                      [header_name] => 1.
                      [header_database_name] => 2
                      [heading] => personal
                  )
      
              [1] => Array
                  (
                      [header_name] => 33
                      [header_database_name] => 333
                      [heading] => personal
                  )
      
          )
      
      [professional] => Array
          (
              [0] => Array
                  (
                      [header_name] => 11. 
                      [header_database_name] => 22
                      [heading] => professional
                  )
      
          )
      )
      

      【讨论】:

        【解决方案4】:

        使用array_column(PHP 5.5 起可用)、array_uniquearray_keysimplode 函数的解决方案:

        $headings = array_column($list, 'heading', 'header_name');
        
        foreach (array_unique($headings) as $v) {
            echo ucfirst($v). PHP_EOL;
            echo implode("\n", array_keys($headings, $v)). PHP_EOL;    
        }
        

        输出:

        Personal
        1
        33
        Professional
        11
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-20
          相关资源
          最近更新 更多