将PHP导出到csv而不查询或

时间:2018-11-16 19:40:39

标签: php mysql export-to-csv

我有一个没有问题的php查询。但是,在导出到csv文件之前,我需要使用正则表达式来自定义一些变量的外观。我也有这个工作。

$form_field_number_UPD = preg_replace('(\W{3}.*)', '\n', $form_field_number);

我的问题是我需要导出这些自定义变量,而不是原始查询结果。

这可能吗?

也是

我一直试图在mysql 5.7中使用正则表达式,但是没有运气。 MySQL 5.7中是否存在preg_replace等效项? 我还没有找到。 MySQL 7中似乎只有一个,但是我还不能升级。

我想为它找到与之等效的mysql的php

$form_field_number_UPD = preg_replace('(\W{3}.*)', '\n', $form_field_number);

我在下面尝试过,但是不起作用。

REPLACE(fd.form_field_number, '(\W{3}.*)', '\n', 1, 5) AS New_Field 

感谢您的帮助,即使它是“在这里看看...”

修订::

我有一个复选框组列,结果是:

result 1|~|result 1
result 2|~|result 2
result 3|~|result 3

正则表达式删除|〜|及其右边的所有内容,因此结果为:

result 1
result 2
result 3

我可以在php中执行此操作,但需要将这些结果保存到可下载的csv文件中。

3 个答案:

答案 0 :(得分:1)

我建议您使用MySQL SELECT查询并使用php preg_replace()语句获取要导出到php的数据数组,因为您知道这是可行的。从那里将替换后的数据从php数组导出到csv文件非常简单。

此链接包含有关如何完成此操作的代码示例的答案:Export to CSV via PHP

答案 1 :(得分:1)

如果您的列始终用符号|~|分隔,则不需要正则表达式;查找此确切序列的出现,然后使用SUBSTR截去其余字符串:

SELECT SUBSTR(fd.form_field_number, 1, LOCATE('|~|', fd.form_field_number)-1) AS trimmed
FROM ...

答案 2 :(得分:0)

嗯,我在那儿。我确实需要使用php,并且在显示端运行了php。我现在需要做的是将结果转换为数组并将其传递给csv导出。

我需要从foreach而不是查询结果中传递php结果,因为我需要使用正则表达式来调整结果列。

尽管我可以使用$ res_UPD或$ list数组,但是在那里没有成功。

以下是我到目前为止使用的内容。我对将函数放置在哪里以及生成csv文件感到困惑。在foreach之上还是之下?

我们将不胜感激,如果让我知道我离我们很远,那么...

    header("Content-Type: text/csv");
    header("Content-Disposition: attachment; filename=$q1b.csv");

    switch( $q1b )
    {
        case "research-request":


                $query = "SELECT
                            DATE_FORMAT(FROM_UNIXTIME(fd.entry_date), '%Y-%m-%d') AS date_formatted,
                            fd.entry_id,
                            fd.form_field_1 AS FIRST_NAME,
                            fd.form_field_2 AS LAST_NAME,
                            fd.form_field_3 AS EMAIL,
                            fd.form_field_957 AS checkbox_field, /* checkbox group */
                        FROM db_table AS fd
                        WHERE 1  ORDER BY date_formatted DESC";
            break;

    }

    $res = $this->EE->db->query($query);

        if ($res->num_rows() > 0)
        {

            foreach($res->result_array() as $row)
            {
                $date_formatted = $row['date_formatted'];
                $FIRST_NAME = $row['FIRST_NAME'];
                $LAST_NAME = $row['LAST_NAME'];
                $EMAIL = $row['EMAIL'];
                $checkbox_field = $row['checkbox_field'];
                $checkbox_field_UPD = preg_replace('(\W{3}.*)', '\n', $checkbox_field);

                $res_UPD = 
                $date_formatted.",".$FIRST_NAME.",".$LAST_NAME.",".$EMAIL.",".$checkbox_field_UPD;

                $list = array($date_formatted,$FIRST_NAME,$LAST_NAME,$EMAIL,$checkbox_field_UPD);

            }

        }