我正在尝试从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
)
)
我将不胜感激。
答案 0 :(得分:1)
不要让它自动编号,只需再次提供名称作为键:
for ($i = 0; $i < $stmt->columnCount(); $i++) {
$col = $stmt->getColumnMeta($i);
$columns[$col['name']] = $col['name'];
}
答案 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;
}