在CodeIgniter中跳过csv_from_result()中的第一行

时间:2013-04-02 10:09:40

标签: php codeigniter csv expressionengine

我正在尝试使用CodeIgniter中的id将仅包含两个字段emailcsv_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;

3 个答案:

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