我正在尝试使用CodeIgniter中的id
将仅包含两个字段email
,csv_from_result()
的简单表格导出到CSV文件。
生成的CSV文件的第一行包含列的名称,但我只想要数据。
有没有办法跳过这个第一行?
这是我的代码:
$query = $this->EE->db->query("SELECT email FROM exp_sct_mailing_list");
$this->EE->load->dbutil();
$data = $this->EE->dbutil->csv_from_result( $query, ",", "\r\n" );
$this->EE->load->helper('download');
force_download("mailing_list.csv", $data);
exit;
答案 0 :(得分:4)
最简单的方法是删除第一行,如下所示:
$query = $this->EE->db->query("SELECT email FROM exp_sct_mailing_list");
$this->EE->load->dbutil();
$data = ltrim(strstr($this->EE->dbutil->csv_from_result($query, ',', "\r\n"), "\r\n"));
$this->EE->load->helper('download');
force_download("mailing_list.csv", $data);
exit;
这里我们只提取从第一个CRLF \r\n
到数据末尾的内容。然后我们将CRLF修剪掉,从而删除了第一行。
答案 1 :(得分:1)
可悲的是,无法将参数传递给函数csv_from_result
并避免列名,但您可以根据原始函数的代码构建自定义csv_from_result
函数,删除不需要的函数部分:
/**
* Generate CSV from a query result object
*
* @param object $query Query result object
* @param string $delim Delimiter (default: ,)
* @param string $newline Newline character (default: \n)
* @param string $enclosure Enclosure (default: ")
* @return string
*/
function my_custom_csv_from_result($query, $delim = ',', $newline = "\n", $enclosure = '"')
{
if ( ! is_object($query) OR ! method_exists($query, 'list_fields'))
{
show_error('You must submit a valid result object');
}
$out = '';
// Blast through the result array and build out the rows
while ($row = $query->unbuffered_row('array'))
{
foreach ($row as $item)
{
$out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $item).$enclosure.$delim;
}
$out = substr(rtrim($out), 0, -strlen($delim)).$newline;
}
return $out;
}
代码基于csv_from_result
的实施,取自https://github.com/EllisLab/CodeIgniter/blob/develop/system/database/DB_utility.php
答案 2 :(得分:0)
您可以使用array_shift
$data = array_values(array_shift($data));
这将删除第一行。
您的代码变为:
$query = $this->EE->db->query("SELECT email FROM exp_sct_mailing_list");
$this->EE->load->dbutil();
$data = $this->EE->dbutil->csv_from_result( $query, ",", "\r\n" );
$data = array_values(array_shift($data)); //skip the first line
$this->EE->load->helper('download');
force_download("mailing_list.csv", $data);
exit;