我是laravel的新手,并且很难找到将一个表导出到csv的方法.我在控制器类中尝试了以下代码,但它给了我一个错误:
public function get_export()
{
$table = Cpmreport::all();
$file = fopen('file.csv', 'w');
foreach ($table as $row) {
fputcsv($file, $row);
}
fclose($file);
return Redirect::to('consolidated');
}
Run Code Online (Sandbox Code Playgroud)
Cpmreport的模型类:
class Cpmreport extends Eloquent
{
public static $table='cpm_report';
}
Run Code Online (Sandbox Code Playgroud)
错误 :
Message:
fputcsv() expects parameter 2 to be array, object given
Location:
C:\xampp\htdocs\cpm_report\application\controllers\cpmreports.php on line 195
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
我生成了一个包含外来字符的简单CSV文件.我已经注意到,如果我没有包含字节顺序标记,外国字符在Excel中没有正确显示(但是当存在BOM时它们看起来很好).
如何在首次创建文件时将BOM添加到文件的开头?我尝试了以下内容并且无法正常工作: - /
function processForm($competition, $competitionEntry) {
$BOM = "\xEF\xBB\xBF"; // UTF-8 BOM
$filename = $competition->ID.".csv";
$file = "entries/".$filename;
$fields = array_keys($competitionEntry);
$submittedForm = $competitionEntry;
if(file_exists($file)) {
$fp = fopen($file, 'a');
if($fp &&
fputcsv($fp, $submittedForm) &&
fclose($fp)) {
return true;
}
} else { // CREATE NEW FILE
$fp = fopen($file, 'w');
if($fp &&
fputcsv($fp, $BOM) && // WRITE BOM TO FILE
fputcsv($fp, $fields) &&
fputcsv($fp, $submittedForm) &&
fclose($fp)) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将多维数组放入csv文件中.数组中的数据是这样的:
Array
(
[0] => Array
(
[product_id] => 1111
[name] => Alcatel One Touch Idol 2
[keyword] => alcatel-one-touch-idol-2
[options] => Array
(
[0] => Array
(
[price] => 54.0000
)
[1] => Array
(
[price] => 42.0000
)
[2] => Array
(
[price] => 10.0000
)
[3] => Array
(
[price] =>
)
[4] => Array
(
[price] =>
)
[5] => Array
(
[price] =>
)
[6] => Array
(
[price] =>
)
[7] => Array
( …Run Code Online (Sandbox Code Playgroud) 我有使用fputcsv创建的字符串
Date,Name,Hours 2013-01-02,"Test User",7:59 2013-01-03,"Test User",7:53 2013-01-04,"Test User",8:12 2013-01-07,"Test User",7:56 2013-01-08,"Test User",8:25 2013-01-09,"Test User",7:56 2013-01-10,"Test User",8:10 2013-01-11,"Test User",7:53 2013-01-14,"Test User",7:54 2013-01-15,"Test User",0:34 2013-04-01,"Test User",5:51 2013-04-02,"Test User",8:50 2013-04-03,"Test User",7:25 2013-04-04,"Test User",8:3 2013-04-05,"Test User","10:42:52[Not punch out]" ,Total,103:1
Run Code Online (Sandbox Code Playgroud)
当正确的标题(标题('Content-type:application/csv');标题('Content-Disposition:attachment; filename ="'.$ filename.'"');)被设置时,它会给出正确的csv文件.

但是我想再次将这个字符串转换为数组格式,所以我尝试将上面的字符串传递给str_getcsv但是得到像这样的数组
Array
(
[0] => Date
[1] => Name
[2] => Hours
2013-01-02
[3] => "Allen Herrera"
[4] => 7:59
2013-01-03
[5] => "Allen Herrera"
[6] => 7:53
2013-01-04
[7] => "Allen Herrera"
[8] => 8:12
2013-01-07 …Run Code Online (Sandbox Code Playgroud) <?php
$filename="backup_".date('m/d/Y', time()).".csv";
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');
$q=mysqli_query($conn,"SELECT * FROM visitordb");
$file = fopen('php://output','w');
if(mysqli_num_rows($q)>0) {
while($res = $q->fetch_assoc()) {
$datas = $res["sno"].','.$res["UDID"].','.$res["taggnumber"].','.$res["name"].','.$res["designation"].','.$res["company"].','.$res["email"];
fputcsv($file, explode(',', $datas));
}
} else {
}
fclose($file);
}
Run Code Online (Sandbox Code Playgroud)
在ms excel中查看时,以上代码在.csv文件的开头生成空行。.csv文件还可以在页面中生成任何html代码。
我有一个PHP例程来处理表单并将值输出到CSV文件.我正在使用array_keys()创建标题行(如果有的话,跳过).一切都很完美,除了最后的标题术语是"提交",因为当然,我的表单包含一个提交按钮.所以数据最终看起来像这样:
name,email,cell,dob,study,submit
"Temp One",fred@gmail.com,646-325-1111,1995-03-31,8,Submit
"Temp Two",tom@gmail.com,646-325-2222,1995-03-31,4,Submit
Run Code Online (Sandbox Code Playgroud)
如何从标题和数据中省略提交按钮?
这是我的代码:
if(isset($_POST['submit'])) {
$data = array_values($_POST); // get only values
$headers = array_keys($_POST); // keys are headers
if( $fp = fopen('data.csv','a+')) {
$line = fgets($fp);
if(!$line == $headers) {
fputcsv($fp, $headers);
fputcsv($fp, $data);
}
else
{
fputcsv($fp, $data);
}
fclose($fp);
header('Location: thanks.php');
}
}
Run Code Online (Sandbox Code Playgroud) $file = fopen("contacts.csv","w");
foreach(array_unique($matches[0]) as $email) {
fputcsv($file,explode(',',$email));
}
fclose($file);
Run Code Online (Sandbox Code Playgroud)
上面的代码生成一个CSV文件.如何从最后记录的行更新CSV而不从头开始覆盖?
我正在尝试从数组写入 csv 文件,作为 csv 文件的标题
$csv_fields[] = 'produto_quest';
$csv_fields[] = 'produto_quest1';
$csv_fields[] = 'comentario_aspecto_atm';
$csv_fields[] = 'aspecto_geral_int';
$csv_fields[] = 'organizacao_espaco';
$f = fopen('php://memory', 'w+');
fputcsv($f, $csv_fields, ";");
foreach ($relat as $fields) { // load from MySQL as a multidimensional array
foreach($fields as $key => &$value1) {
$value1 = iconv("UTF-8", "", $value1);
}
fputcsv($f, $fields, ";");
}
fseek($f, 0);
fpassthru($f);
fclose($f);
Run Code Online (Sandbox Code Playgroud)
除了文件开头的隐藏字符外,所有文件都是正确的。如果我用记事本打开文件,它会正确显示,但在 Excel 中,开头有一个空行。谁能帮我?
我正在将数据导出到.csv文件中并且它工作正常,但我有一个小问题.我取name,并gender从表中,但性别我保存id在我的数据库(即1 = Male,2 = Female).我的下面的代码给了我性别的ID,我该如何解决?男性返回1,女性返回2:
$rows = mysql_query("SELECT `name`, `gender` FROM TABLE");
while ($row = mysql_fetch_assoc($rows)) {
fputcsv($output, $row);
}
Run Code Online (Sandbox Code Playgroud) 问题:我有一个关联数组,其中所有键代表 csv 标题,每个 $key => 数组中的值代表该列中的项目。
研究:据我所知,fputcsv喜欢逐行输入,但这种基于列的数组使事情变得复杂。我还没有找到任何可以完成此任务的功能。
例子:
Array(
['fruits'] => Array(
[0] => 'apples',
[1] => 'oranges',
[2] => 'bananas'
),
['meats'] => Array(
[0] => 'porkchop',
[1] => 'chicken',
[2] => 'salami',
[3] => 'rabbit'
),
)
Run Code Online (Sandbox Code Playgroud)
需要成为:
fruits,meats
apples,porkchop
oranges,chicken
bananas,salami
,rabbit
Run Code Online (Sandbox Code Playgroud)
为什么很难:
您需要知道形成空白点的最大行数。