我正在尝试将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
函数的数组中的一种好方法是什么?
答案 0 :(得分:1)
使用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] = "";
}
}
答案 1 :(得分:0)
您应该检查您的输入。 您在此处输入的是同一文件。
例如:
int main(){
double displayWidth = 2160;
double displayHeight = 4096;
double imageWidth = 640;
double imageHeight = 480;
double widthScaleRatio = displayWidth / imageWidth; // <- using this scale will guarantee the width of the new image is the same as the display's width, but might crop the height
double heightScaleRatio = displayHeight / imageHeight; // <- using this scale will guarantee the height of the new image is the same as the display's height but might crop the width
double scale = 1.0;
// If scaling by the widthScaleRatio makes the height too big, use the heightScaleRatio
// Otherwise use the widthScaleRatio
if (imageHeight * widthScaleRatio > displayHeight)
{
scale = heightScaleRatio;
}
else
{
scale = widthScaleRatio;
}
double newWidth = imageWidth * scale;
double newHeight = imageHeight * scale;
std::cout << "New size = (" << newWidth << ", " << newHeight << ")\n";
}
OR
<?php
$array=array();
$file=fopen("test.csv","r"));
//check $file has error or not?!
while(($line = fgetcsv($file,1000)) !== false)
{
$array[]=$line;
}
fclose($file);
?>
有用链接:
How to create an array from a CSV file using PHP and the fgetcsv function
Converting csv files data to an array using php str_getcsv function
How to create an array from a CSV file using PHP and the fgetcsv function
最好检查下面的链接。 也许有用。
https://www.codeproject.com/Tips/1074174/Simple-Way-to-Convert-HTML-Table-Data-into-PHP-Arr
https://www.jamesnorthard.com/convert-database-rows-to-columns-using-php/
How to encode an array of data and save to a pivot table laravel
SQL Query: Rows to Columns Pivot into PHP Array / HTML Output
How to transform sql query results to pivot table using php arrays?