将数据透视表导出到CSV Laravel

时间:2018-12-15 17:08:35

标签: php laravel csv pivot

我正在尝试将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函数的数组中的一种好方法是什么?

2 个答案:

答案 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)

将CSV转换为PHP数组

您应该检查您的输入。 您在此处输入的是同一文件。

例如:

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);
?>

有用的功能:


有用链接:

更新:

最好检查下面的链接。 也许有用。