3

CodeIgniter を使用してid、 2 つのフィールドのみを含む単純なテーブルをemailCSV ファイルにエクスポートしようとしています。csv_from_result()

生成された 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;
4

3 に答える 3

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 を削除したままにして、最初の行を削除しました。

于 2013-04-02T10:23:40.567 に答える
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;
}

コードは、 httpscsv_from_result ://github.com/EllisLab/CodeIgniter/blob/develop/system/database/DB_utility.php から取得した実装に基づいています。

于 2013-04-02T10:23:34.837 に答える