Php 从多维数组创建表

Php 从多维数组创建表,php,html,mysql,arrays,Php,Html,Mysql,Arrays,我需要生成一个html表,显示存储在数据库中的信息。我的代码读取此信息并将其放入多维数组中: Array ( [1] => Array ( [FIRST_NAME] => Admin [MIDDLE_NAME] => Admin [LAST_NAME] => Admin [PHONE] => [EMAIL] => ) [2] => Array ( [FIRST_NAME] => Jad

我需要生成一个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));
    }
$fieldarray=array(“名字”、“中间名”、“姓氏”、“电话”、“电子邮件”);
maketable(“选择员工的名字、中间名字、姓氏、电话、电子邮件)”,$fieldarray);
函数maketable($query,$fieldarray){
//计算列数
$columns=count($fieldarray);
//运行查询
$result=DBGet(DBQuery($query)))或die(mysql_error());
//$itemnum=mysql\u num\u行($result);
如果(计数($result)>0{
做{
回声“”;
对于($x=0;$x<$columns;$x++){
echo“”$items[$fieldarray[$x]]。“”;
}
回声“”;
}而($items=mysql_fetch_assoc($result));
}
但这是我得到的结果:

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

如何解决此问题?

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

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

代码必须非常具体:
FIRST\u NAME
FIRST NAME

不同。您遇到的问题是
$fieldarray
变量中使用了“人性化”字符串,如“FIRST NAME”、“E-mail”等。从数据库返回的信息如下所示:

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

代码必须非常具体:
FIRST\u NAME
FIRST NAME
不一样,您的数组键可能是DB列名,不是吗?
因此,您需要查找
First\u Name
等,而不是
First\u Name

您的数组键很可能是DB列名,不是吗?
因此,您需要查找
First_Name
等,而不是
First_Name
等。

2unco和B-and-p状态都是正确的,您对数据库字段使用了错误的assoc键。然而,您的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;

什么2unco和B-and-p状态都是正确的,您对数据库字段使用了错误的assoc键。但是,您的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;