从多维数组创建一个表

时间:2014-10-15 11:37:54

标签: php html mysql arrays

我需要生成一个html表,显示存储在数据库中的信息。我的代码读取此信息并将其放在一个多维数组中:

Array ( [1] => Array ( 
    [FIRST_NAME] => Admin 
    [MIDDLE_NAME] => Admin 
    [LAST_NAME] => Admin 
    [PHONE] => 
    [EMAIL] => 
) [2] => Array ( 
    [FIRST_NAME] => Jad 
    [MIDDLE_NAME] => 
    [LAST_NAME] => Jad 
    [PHONE] => 961558777
    [EMAIL] => jad.jad@gmail.com 
) [3] => Array ( 
    [FIRST_NAME] => Sara 
    [MIDDLE_NAME] => 
    [LAST_NAME] => Sara 
    [PHONE] => 
    [EMAIL] => 
) )

我需要将此数组显示为包含5列的表:名字,中间名,姓氏,电话,电子邮件

我试过了:

$fieldarray = array("First Name","Middle Name","Last Name", "Phone", "E-mail");

maketable("SELECT first_name, middle_name, last_name, phone, email FROM staff", $fieldarray);

function maketable($query, $fieldarray){
    //count number of columns

    $columns = count($fieldarray);
    //run the query

    $result = DBGet(DBQuery(($query))) or die(mysql_error()) ;
    // $itemnum = mysql_num_rows($result);


    if(count($result) > 0){ 
        do {   
            echo "< tr >" ;

            for($x = 0; $x < $columns; $x++) {
                echo "< td >" .$items[$fieldarray[$x]]. "< /td >" ;
            }

            echo "< /tr >" ;
        } while($items = mysql_fetch_assoc($result));
    }

但这是我得到的结果:

< table >< tr >< td >< /td >< td >< /td >< td >< /td >< td >< /td >< td >< /td >< /tr >< /table >

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

您遇到的问题出现在$fieldarray变量中,您使用的是“人性化”字符串,如“名字”,“电子邮件”等。从数据库返回的信息如下所示:

Array ( [FIRST_NAME] => Admin [MIDDLE_NAME] => Admin [LAST_NAME] => Admin [PHONE] => [EMAIL] => )

您必须在代码中非常具体:FIRST_NAMEFirst Name不同。

答案 1 :(得分:2)

可能你的数组键是DB列名,不是吗? 因此,您需要寻找First Name

,而不是first_name

答案 2 :(得分:1)

2unco和B-and-P状态都是正确的,您使用了错误的关键字作为数据库字段。但是,您还有另一个围绕do / while循环的问题 - 事实上,在第一次迭代中$items将不会被设置。当PHP执行时,这本身可能会导致错误/警告,因为您尝试从$items读取的密钥将不存在。

要纠正这两个问题,您可以尝试以下方法:

<?php
/// build a look up for both field names and nice equivalents
$fieldarray = array(
  'first_name' => 'First Name',
  'middle_name' => 'Middle Name',
  'last_name' => 'Last Name',
  'phone' => 'Phone',
  'email' => 'E-mail'
);
function maketable($query, $fieldarray) {
    //count number of columns
    $columns = count($fieldarray);
    //run the query
    $result = DBGet(DBQuery(($query))) or die(mysql_error());
    $table = '';
    if ($result) { 
        while( ($items = mysql_fetch_assoc($result)) ) {
            /// build the table into a string, makes for easier function usage
            $table .= '<tr>';
            foreach ( $fieldarray as $field_name => $field_nice ) {
                $table .= '<td>' .$items[$field_name]. '</td>';
            }
            $table .= '</tr>';
        } ;
    }
    /// only return markup if we found rows
    return $table ? '<table>' . $table . '</table>' : '';
}
/// I've switched all quotes to singular, as it's best to reserve double 
/// quotes for strings you wish parsed for $variables.
$table = maketable('SELECT first_name, middle_name, last_name, phone, email '.
                   'FROM staff', $fieldarray);
echo $table;

作为上述内容的扩展,您可以通过添加生成表头的功能(即<th>来构建第一行值来改进代码 - 您可以使用$field_nice变量执行此操作

  

我需要生成一个html表,显示存储在数据库中的信息。我的代码读取此信息并将其放在多维数组中

您粘贴的实际代码不构建多维数组,也不能从一个数组中运行;它直接从数据库中获取一个assoc数组。这就是为什么我已经构建了代码来处理这个问题。如果需要从多维数组生成表 - 您需要更改maketable函数以接受该数组作为其第一个参数,并从内部删除数据库处理代码。只需稍加修改,您应该可以使它适用于多维数组。