php - 将数据透视表导出到 CSV Laravel
问题描述
我正在尝试将我的 Laravel 项目中的某些表导出到 CSV,以便备份它们并能够在项目的不同实例之间传输大量数据。
到目前为止,我有这个export
功能:
private function _export($filename, $table)
{
array_unshift($table, array_keys($table[0]));
$handle = fopen($filename, 'w+');
foreach ($table as $row) {
fputcsv($handle, $row);
}
fclose($handle);
}
这会从表中获取文件名(例如stages.csv
)和数组(例如Stage::all()->toArray()
)并输出文件。
我正在处理的项目有很多很多关系,每个关系都有自己的数据透视表。export
将数据透视表的行放入可以传递给函数的数组的好方法是什么?
解决方案
使用 laravel 的array_dot()函数,它会将你的多维数组扁平化为带有点符号的单层:
$table = array_dot($table);
作为您方法的第一行。
这假设您将枢轴与$table
变量一起传递。
的一个烦人的功能array_dot()
是空的枢轴将保留为空数组[]
而不是空字符串""
(这fputcsv()
不会喜欢)。因此,您需要使用 PHP 数组函数或手动进行调整,例如
foreach ($table as $rowNo => $row) {
foreach ($row as $col => value) {
if (is_array($value)) $table[$rowNo][$col] = "";
}
}
推荐阅读
- python - 安装 Python 包时出现 Ubuntu 错误
- javascript - 是否有在浏览器中创建绘图功能的首选方法?
- elasticsearch - 将mysql数据传输到kibana时出现logstash配置错误,sql db密码为空,所以我传递jdbc_password =“”
- java - 使用 Spring Boot 项目在 html 表中显示本地文件中的 json 数组
- xamarin.forms - 使用 xamarin 形式的融合图表
- javascript - 使用Javascript检查到控制器时如何传递一组表记录
- rust - 无法分配给“x”,因为它是借来的
- python - 在 pygame 中实现 Rect 对象和球之间的碰撞检测功能
- node.js - epoll 是为 Linux 构建的,不适合在 Windows 上使用
- typescript - 采用现有类型并将其每个属性设为可选