【发布时间】:2019-03-05 07:22:33
【问题描述】:
我正在从数据库中获取很多产品行。
其中一些行包含一个域名(例如 google.com),我希望在输出之前将其从字符串中删除(修剪)。 注意:有多个 TLD(.se、.fi.、.net、.org ...)
首先,我将从域表中获取所有域名到自己的数组中,然后使用preg_match(),运行测试字符串是否包含特定域。如果没有从产品行中找到域,则无需修剪任何内容。
domains 数组如下所示:
[0] => Array
(
[domain] => google.com
)
[1] => Array
(
[domain] => google.se
)
这是从数据库输出的行示例:
Product 1 - Test purposes 1
Product 2 - Test purposes 2 google.com
Product 2 - Test purposes 2 google.se
下面是我迄今为止尝试过的:
<?php
...
$table = [];
# loop through all rows from the database
while ($row = $stmt->fetch()) {
# loop through all domains
foreach($domains as $domain) {
if(preg_match("/{$domain['domain']}/i", $row['product'],$matches, PREG_OFFSET_CAPTURE)) {
$trimmed = str_replace($domain['domain'], '', $row['product']) ;
$table[$i]['product'] = $trimmed;
} else {
$table[$i]['product'] = $row['product'];
}
}
}
这确实忽略了它找到的所有域,只使用原始的$row['product'],而不是从$row['product'] 中修剪域名。
【问题讨论】:
-
那么,有什么问题?
-
上面的正则表达式不会从
$row['product']中删除域名,它会返回原来的。