php入门转型

时间:2012-08-29 21:41:22

标签: php transformation

我有一个超过20000行的数据库。

列有这个表达式:

<td align="left" valign="top"><input name="mail" type="hidden" id="mail" value="mail@domain.com," /></td>

我想只检索电子邮件地址;我该怎么用ph​​p?

4 个答案:

答案 0 :(得分:2)

我建议使用TRIM删除电子邮件值前后的额外文字:

SELECT TRIM(TRAILING  '," /></td>'
            FROM TRIM(LEADING '<td align="left" valign="top"><input name="mail" type="hidden" id="mail" value="'
            FROM your_field)) AS email
FROM your_table;

它会起作用,因为您在评论this is the exacte expression in each column only the email adress which is different中确认了这一点。

使用仅限MySQL的解决方案将比使用MySQL检索数据更快,而使用PHP来提取电子邮件。它还使您能够编写查询,以便轻松快速地将电子邮件保存在另一列或表中。

答案 1 :(得分:1)

如果HTML在所有行中完全相同,您实际上可以在SQL中执行此操作:

SELECT REPLACE(
    REPLACE(
        field_name,
        '<td align="left" valign="top"><input name="mail" type="hidden" id="mail" value="',\
        ''
    ),
    '" /></td>',
    ''
) as email
FROM table;

答案 2 :(得分:0)

只要这种格式完全是静态的,你就可以摆脱一个非常草率的正则表达式,如下所示:

$ cat emailreg.php
<?php
$html = '<td align="left" valign="top"><input name="mail" type="hidden" id="mail" value="mail@domain.com," /></td>';
if(preg_match('@value="(?P<email>[^",]+),"@', $html, $matches)) {
    var_dump($matches['email']);
}
$ php emailreg.php
string(15) "mail@domain.com"
$

答案 3 :(得分:0)

如下所示,假设$ column包含您的列值,如下所示:

$column='<td align="left" valign="top"><input name="mail" type="hidden" id="mail" value="mail@domain.com," /></td>' ;
$xml = simplexml_load_string( $column );
echo $xml->input[0]['value'] . "\n" ;

输出示例:

mail@domain.com,

它会显示您的电子邮件。 当你已经$column时,这当然很好。如果您想要像这样处理整个查询,请像其他人一样建议,在查询时处理它会更快。

如果您喜欢这里的功能,可以使用:

function getmail( $column )
{
    return simplexml_load_string( $column )->input[0]['value'] ;
}

和用法:

echo getmail( '<td align="left" valign="top"><input name="mail" type="hidden" id="mail" value="mail@domain.com," /></td>' ) ;

玩得开心。