在数组中显示mysql列名及其数据

时间:2014-03-10 16:39:19

标签: php arrays

我正在尝试从MySql获取记录并使用array将其显示在PDO以及列标题中,因为我这样做是因为我想将它们导出为excel,我正在使用php-excel

现在,以下代码在数组中完美地显示记录,我可以将它们导出得很好

    while ($row[] = $stmt->fetch(PDO::FETCH_ASSOC)) :
        $data = $row;
    endwhile;

上面代码得到的数组如下:

Array
(
    [0] => Array
        (
            [user_id] => 1
            [fname] => First Name
            [lname] => Last Name
        )

    [1] => Array
        (
            [user_id] => 91
            [fname] => First Name
            [lname] => Last Name
        )
)

但问题是我在Excel中缺少列标题,因此我需要在数组中显示MySql列标题。

我使用以下代码为列标题创建数组

    for ($i = 0; $i < $stmt->columnCount(); $i++) {
        $col = $stmt->getColumnMeta($i);
        $columns[] = $col['name'];
    }

但这给了我一个格式如下的数组

Array
(
    [0] => user_id
    [1] => fname
    [2] => lname
)

而我需要以下格式的列标题数组

Array
(
    [0] => Array
        (
            [user_id] => user_id
            [fname] => fname
            [lname] => lname
        )
)

我将不胜感激。

3 个答案:

答案 0 :(得分:1)

不要让它自动编号,只需再次提供名称作为键:

for ($i = 0; $i < $stmt->columnCount(); $i++) {
    $col = $stmt->getColumnMeta($i);
    $columns[$col['name']] = $col['name'];
}

示例:https://eval.in/117424

答案 1 :(得分:1)

我假设您希望标题位于同一个数组中。在这种情况下,您可以在之前执行while循环

$data[0] = array();
for ($i = 0; $i < $stmt->columnCount(); $i++) {
    $col = $stmt->getColumnMeta($i);
    $data[0][$col['name']] = $col['name'];
}

此外,while循环效率稍低。您将每行推入$row数组,然后每次将其复制到$data。应该这样做:

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) :
    $data[] = $row;
endwhile;

这应该让你:

$data = Array
(
    [0] => Array
    (
        [user_id] => user_id
        [fname] => fname
        [lname] => lname
    )
    [1] => Array
    (
        [user_id] => value...
        ...
    )
    ...
)

答案 2 :(得分:1)

可能更容易:

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    if(!isset($data)) {
        $data[] = array_combine(array_keys($row), array_keys($row));
    }
    $data[] = $row;
}

或者您可以在事后使用array_unshift()添加它们。

或者在一个单独的数组中:

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    if(!isset($col)) {
        $col[] = array_combine(array_keys($row), array_keys($row));
    }
    $data[] = $row;
}