0

我正在使用 Codeigniter。我有一个像这样的二维数组(来自数据库):

Array
(
    [0] => Array
        (
            [name] => white_leds
            [totalvalue] => 7.20
            [year] => 2008
        )

    [1] => Array
        (
            [name] => white_leds
            [totalvalue] => 2.79
            [year] => 2009
        )

    [2] => Array
        (
            [name] => white_leds
            [totalvalue] => 711.77
            [year] => 2010
        )

    [3] => Array
        (
            [name] => white_leds
            [totalvalue] => 844.21
            [year] => 2011
        )

    [4] => Array
        (
            [name] => blue_leds
            [totalvalue] => 2.07
            [year] => 2008
        )

    [5] => Array
        (
            [name] => blue_leds
            [totalvalue] => 2.65
            [year] => 2009
        )

    [6] => Array
        (
            [name] => blue_leds
            [totalvalue] => 70.11
            [year] => 2010
        )

    [7] => Array
        (
            [name] => blue_leds
            [totalvalue] => 42.43
            [year] => 2011
        )

)

我想在 html 表中打印这个数组,如下所示:

<table>
    <tr>
        <th>name / year</th>
        <th>2008</th>
        <th>2009</th>
        <th>2010</th>
        <th>2011</th>
    </tr>
    <tr>
        <td>white_leds</td>
        <td>7.20</td>
        <td>2.79</td>
        <td>711.77</td>
        <td>844.21</td>
    </tr>
    <tr>
        <td>blue_leds</td>
        <td>2.07</td>
        <td>2.65</td>
        <td>70.11</td>
        <td>42.43</td>
    </tr>
</table>

我已经尝试了很多方法来使用 foreach 和 for 循环来做到这一点。我知道我需要两个循环,一个嵌套在另一个循环内。第二个问题是更换产品的年份和名称。

我该怎么做?

非常感谢您的任何想法。

4

3 回答 3

1

您需要使用 更改您的查询group by year。更改您的查询将自动更改您的数组结构。

$temp   = array();
$data   = array();
$sql    = "select year from table group by year order by year asc";
### fetch the result ###
$rs     = $this->db->query($sql);
$data   = $rs->result_array();
foreach($data as $key=>$each){
        $detailsSql             = "select * from table where year = '{$each}'";
        $detailsRs              = $this->db->query($detailsSql);
        $temp[$each]['details'] = $detailsRs->result_array();
}
return $temp;
于 2013-07-10T06:28:02.237 回答
0

试试下面的片段

  <?php
    $array=Array
    (
        0 => Array
            (
                'name' => 'white_leds',
                'totalvalue' => 7.20,
                'year' => 2008,
            ),

        1 => Array
            (
                'name' => 'white_leds',
                'totalvalue' => 2.79,
                'year' => 2009,
            ),

        2 => Array
            (
                'name' => 'white_leds',
                'totalvalue' => 711.77,
                'year' => 2010,
            ),

        3 => Array
            (
                'name' =>'white_leds',
                'totalvalue' => 844.21,
                'year' => 2011,
            ),

        4 => Array
            (
                'name' => 'blue_leds',
                'totalvalue' => 2.07,
                'year' => 2008,
            ),

        );
        $result=array();
        $output_string='<table>';
        $header[]='name';
        foreach($array as $value){
        $result[$value['name']][$value['year']]=$value['totalvalue'];
        $header[$value['year']]=$value['year'];
        }
        ksort($header);
        $output_string.='<tr>'.add_perfix_suffix($header,'<td>','</td>').'</tr>';
        foreach($result as $title=>$record){
        ksort($record);
        $output_string.='<tr><td>'. $title.'</td>'.add_perfix_suffix($record,'<td>','</td>').'</tr>';
        }
        var_dump($output_string);
        function add_perfix_suffix($array,$prefix,$suffix){
        $string='';
        foreach($array as $value){
        $string.=$prefix.$value.$suffix;
        }
        return $string;
        }
?>
于 2013-07-10T06:33:30.093 回答
0
            $array_sample =Array
(
    0 => Array
        (
            'name' => 'white_leds',
            'totalvalue' => 7.20,
            'year' => 2008,
        ),

    1 => Array
        (
            'name' => 'white_leds',
            'totalvalue' => 2.79,
            'year' => 2009,
        ),

    2 => Array
        (
            'name' => 'white_leds',
            'totalvalue' => 711.77,
            'year' => 2010,
        ),

    3 => Array
        (
            'name' =>'white_leds',
            'totalvalue' => 844.21,
            'year' => 2011,
        ),

    4 => Array
        (
            'name' => 'blue_leds',
            'totalvalue' => 2.07,
            'year' => 2008,
        ),

    );
        $tbl = "<table>";
        $yr = "<tr><td>name/year</td>";
        $pt_w = "<tr><td>white leads</td>";
        $pt_b = "<tr><td>blue leds</td>";
        for($x=0;$x<count($array_sample);$x++)
        {
            $yr .= "<th>".$array_sample[$x]['year']."</th>";

            if($array_sample[$x]['name'] == 'white_leds'):
            {
                $pt_w .= "<td>".$array_sample[$x]['totalvalue']."</td>";
            }
            endif;

            if($array_sample[$x]['name'] == 'blue_leds'):
            {
                $pt_b .= "<td>".$array_sample[$x]['totalvalue']."</td>";
            }
            endif;               
        }

        $yr .= "</tr>";
        $pt_w .= "</tr>";
        $pt_b .= "</tr>";
        $tbl .= $yr.$pt_w.$pt_b."</table>";
        return $tbl; //or echo $tbl;

附加说明:

  1. 如何处理“对象数组”上的数据的方法 $var = $array[$row]->$Column_Name;

  2. 如何处理“数组的数组”上的数据的方法 $var = $array[$x][$y];

于 2013-07-11T07:11:40.677 回答