【问题标题】:Array formatting printing table数组格式化打印表
【发布时间】:2016-06-10 18:50:04
【问题描述】:

我有循环,类似于:

foreach($cars as $car){
    $html .= $car[name];
    $html .= $car[color];
    $html .= $car[doors];
}

它像表格一样打印:

Mercedes | red | 3
Mercedes | blue | 3
Mercedes | red | 5
Ford | green | 4
Ford | green | 5

如何打印:

Mercedes 
red | 3
blue | 3
red | 5

Ford
green | 4
green | 5

请给我一些建议。

【问题讨论】:

  • 首先遍历您的阵列并按品牌对其进行分组。所以使用品牌作为多维数组的键。基本上:[brand => [color => amount, ...], ...]
  • 实际打印在哪里?它是使用任何模板还是只是前端渲染的文件?你有一些示例代码来展示你是如何渲染它的吗?
  • 任何答案都能解决您的问题吗?如果是,请选择合适的答案,否则请提供更多详细信息/问题等。

标签: php arrays printing


【解决方案1】:

你可以试试这个:

$temps = array();
$html = '';
$i = 0;
foreach($cars as $car){
   $temps[$car['name']][$i]['color'] = $car['color']; 
   $temps[$car['name']][$i]['doors'] = $car['doors']; 
   $i++;
}
foreach($temps as $tmp=>$val){
        $html .= $tmp."<br>";
    foreach($val as $v){
        $html .= $v['color']." | ";
        $html .= $v['doors'];
        $html .= '<br>';
    }
}
print $html;

【讨论】:

    【解决方案2】:

    让我们看看我们最初的汽车阵列

    Array(
    [0] => Array
        (
            [name] => Ford
            [color] => Red
            [door] => 3
        )
    
    [1] => Array
        (
            [name] => Toyota
            [color] => Yellow
            [door] => 4
        )
    
    [2] => Array
        (
            [name] => Toyota
            [color] => White
            [door] => 3
        )
    
    [3] => Array
        (
            [name] => Toyota
            [color] => Yellow
            [door] => 3
        )
    
    [4] => Array
        (
            [name] => Mercedes
            [color] => Black
            [door] => 4
        )
    
    [5] => Array
        (
            [name] => Lexus
            [color] => Yellow
            [door] => 4
        )
    
    [6] => Array
        (
            [name] => Mercedes
            [color] => White
            [door] => 2
        )
    
    [7] => Array
        (
            [name] => Mercedes
            [color] => Black
            [door] => 4
        )
    
    [8] => Array
        (
            [name] => Mercedes
            [color] => Black
            [door] => 4
        )
    
    [9] => Array
        (
            [name] => Toyota
            [color] => Black
            [door] => 3
        )
    
    [10] => Array
        (
            [name] => Toyota
            [color] => White
            [door] => 3
        )
    
    )
    

    预期输出

    Ford
    Red | 3
    
    Toyota
    Yellow | 4
    White | 3
    Yellow | 3
    Black | 3
    White | 3
    
    Mercedes
    Black | 4
    White | 2
    Black | 4
    Black | 4
    
    Lexus
    Yellow | 4
    

    实现此结果的代码

            <?php
        $carsArray = hydrateCarArray(); // You can ignore this as you already have carsArray this is just to hydrate inital array.
        $cleanCarsArray = filterCarsByName($carsArray); // This function sort cars by name
        $html = getRequiredFormat($cleanCarsArray); // this hydrate html var with required strcuture
        echo $html;
    
        /*
         * In your case this function is not required as you already have car array
         */
        function hydrateCarArray()
        {
            $carsName = [
                'Mercedes',
                'Toyota',
                'Lexus',
                'Ford',
                'Ferari'
            ];
            $carsColors = [
                'Red', 'White', 'Black', 'Yellow'
            ];
            for ($counter = 0; $counter <= 10; $counter++) {
                $carsArray[] = [
                    'name'  => $carsName[ rand(0, count($carsName) - 1) ],
                    'color' => $carsColors[ rand(0, count($carsColors) - 1) ],
                    'door'  => rand(2, 4)
                ];
            }
    
            return $carsArray;
        }
        /*
         * Arrange cars array by cars name
         */
        function filterCarsByName($carsArray)
        {
            $cleanCarsArray = [];
            foreach ($carsArray as $car) {
                $cleanCarsArray[ $car['name'] ][] = $car;
            }
    
            return $cleanCarsArray;
        }
        /*
         * This function put the car details in required format.
         */
        function getRequiredFormat($cleanCarsArray)
        {
            $html = '';
            array_walk($cleanCarsArray, function ($item, $key) use (&$html) {
                $html .= "<br/>" . $key . "<br/>";
                array_walk($item, function ($item, $key) use (&$html) {
                    $html .= $item['color'] . ' | ' . $item['door'] . "</br>";
                });
            });
    
            return $html;
        }
    ?>
    

    【讨论】:

      【解决方案3】:

      我在网上找到了这个:

      `foreach($features as $key => $feature){
      {
      $html .= '<table style=" margin:0 20px; border:0;">';
      $_features = $feature['features'];
      {
      if(!isset($features[$key-1]) || $feature['groupname'] != $features[$key-1]     ['groupname'])
      $html .= '<tr><td colspan="2">'.$feature['groupname'].'</td></tr>';
      $html .= '<tr>';
      $html .= '<td style="padding: 3px 5px 3px 0;width:230px;float:     left;background-color: #F4F4F6; font-family: Tahoma, Geneva, sans-serif; font-    size:16px; text-align: right;">'.$feature['name'].' </td>';
      $html .= '<td style="padding: 3px 0px 3px 10px;width: 400px;float: left;background-color:#ECECEC; font-family: Tahoma, Geneva, sans-serif; font-size:16px; font-weight: bold;text-align: left;">'.$feature['value'].'</td>';
      $html .= '</tr>';
      }
      $html .= '</table>';
      }`
      

      它帮助我解决了我的问题。

      【讨论】:

        【解决方案4】:

        您需要做的就是记住最后的车名,并在他们更改时输出车名。

        $last_car = NULL;
        foreach($cars as $car){
            if ( $last_car != $car['name'] ) {
                $html .= $car[name] . '<br>';
                $last_car = $car['name'];
            }
            $html .= $car[color] . '|';
            $html .= $car[doors] . '<br>';
        }
        

        【讨论】:

        • (-1) :首先您需要按名称订购汽车数组,例如 { Mercedes, Toyota, Mercedes} 将打印“Mercedes”两次。
        猜你喜欢
        • 2013-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-24
        • 1970-01-01
        • 2012-10-19
        • 1970-01-01
        • 2021-05-03
        相关资源
        最近更新 更多