Я выбираю много строк продукта из базы данных.
Некоторые из этих строк содержат доменное имя (например, google.com), которое я хотел бы удалить (обрезать) изстрока перед выводом. ПРИМЕЧАНИЕ. Существует несколько доменов верхнего уровня (.se, .fi., .Net, .org ...)
Сначала я извлеку все доменные имена из таблицы доменов в собственный массива затем с preg_match()
запустите проверку, содержит ли строка определенный домен или нет.Если домен не найден в строке продукта, ничего не нужно обрезать.
Вот как будет выглядеть массив доменов:
[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']
.