在CakePHP中,使用以下代码我尝试以CSV格式导出用户电子邮件。 我得到了错误。
错误:
Notice (8): Undefined offset: 0 [APP\View\Frontusers\admin_exportemails.ctp, line 12]
Warning (2): fputcsv() expects parameter 2 to be array, null given [APP\View\Helper\CsvHelper.php, line 36]
Notice (8): Undefined offset: 1 [APP\View\Frontusers\admin_exportemails.ctp, line 12]
Warning (2): fputcsv() expects parameter 2 to be array, null given [APP\View\Helper\CsvHelper.php, line 36]
admin_exportemails.ctp
$line= $useremails[0]['Frontuser'];
$this->CSV->addRow(array_keys($line));
foreach ($useremails as $key => $useremail)
{
$line =$useremail[$key]['Frontuser'];
$this->CSV->addRow($line);
}
$filename='useremails';
echo $this->CSV->render($filename);
答案 0 :(得分:1)
$useremail[$key]['Frontuser'];
应该是
$useremail['Frontuser'];
实际上,您的代码根本不需要在foreach循环中包含密钥。
这是PHP 101,所以有关详细信息,请参阅手册: http://php.net/foreach
答案 1 :(得分:1)
您可以简单地在该函数中传递数据数组,并在webroot文件夹中生成csv。 注意: - 1.您应该将空白的csv文件放在webroot文件夹中。 2.您应该将所有信息存储在一个子数组中,该子数组只包含非模型索引的值。
function generate_csv($data_array=array()){
// pr($data_array);die;
foreach ($data_array as $key => $value) {
$newdata[] = $key.','.$value;
}
// pr($newdata);die;
$f = fopen(APP.'webroot/csv_file.csv', 'w+');
foreach ($newdata as $line) {
fputcsv($f, array($line), ',');
}
fseek($f, 0);
fclose($f);
}
答案 2 :(得分:1)
你弄乱了你的foreach。您将其拆分为$key
和$useremail
子数组,这是正常的。但是然后你迭代它并尝试再次访问$useremail[$key]['Frontuser']
,这在那时是不存在的。
foreach ($useremails as $key => $useremail)
这会导致原始[0]
数组中的[1]
和$useremails
设置为$key
,但您会遍历$useremails
上的所有项目,所以你可以简单地说:
$line = $useremail['Frontuser'];
您不需要$key
,因为这不是迭代项目的一部分,例如你的foreach第一次跑,它看到了:
[Frontuser] => Array
(
[name] => Rash
[email] => rash.com
)
在第二次迭代中它看到了:
[Frontuser] => Array
(
[name] => John
[email] => john@gmail.com
)
因此,不再有[0]
或[1]
索引。
答案 3 :(得分:1)
你在for循环中犯了错误并以错误的方式迭代它。只需从foreach循环中省略下面的行。
$ line = $ useremail [$ key] [' Frontuser'];
答案 4 :(得分:0)
这里有两个选项
1.将文件夹中的csv文件保存到浏览器并输出
2.将输出发送到浏览器
function generate_csv($data_array = array()) {
//$f = fopen(APP . 'webroot/files/unsaved_bars.csv', 'w+'); // for save csv file in folder not sent output to browser
$f = fopen("php://output", "a"); // for send output to browser
$headers[] = array('id','name','other_info'); // for header row
$data_array = array_merge($headers, $data_array);
foreach ($data_array as $line) {
fputcsv($f, $line, ',');
}
//fseek($f, 0);
fclose($f);
}