我有一个没有问题的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文件中。
答案 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);
}
}