Null - это определенный подтип варианта. Он не существует вне типа Variant и создан, чтобы позволить Variant моделировать нулевое значение базы данных.
Ничто не является значением переменной Object. Он по существу идентичен нулевому указателю, т. Е. Объекта нет.
Ниже приведена ошибка, потому что «Is» может использоваться только с переменными Object:
if rs is Null then
' this throws an error of "types not compatible"
end if
после чего возникает ошибка, потому что переменная Object никогда не может быть Null:
if rs = Null then
' this throws an error of "types not compatible"
end if
Следующая оценка False: IsNull () принимает аргумент Variant.
if isNull(rs) then
' never enters here, isNull(rs) evaluates to False
end if
Это эквивалентно :
VarType(rs) = vbNull
Вот один из способов сделать это, просто установите переменную $ multi на то, что вы используете ....
// (?) could have more than one domain match true / false
$multi = FALSE;
while ( $row = $stmt->fetch ( ) )
{
// loop through all domains
$trimmed = $row['product'];
foreach ( $domains as $domain )
{
if( preg_match ( "/{$domain['domain']}/i", $trimmed ) )
{
$trimmed = str_replace ( $domain['domain'], '', $trimmed );
if ( $multi === FALSE )
{
break;
}
}
}
$table[$i]['product'] = $trimmed;
}
Резюме
Это красивый. Вам понравится ответ.
Добавьте следующую строку перед } else {
:
continue 2;
Объяснение
Поскольку вы делаете двойной цикл, если соответствующий домен не является последним доменом, он переопределит домен, которому соответствует соответствие. Таким образом, вам нужно перейти сразу к следующей строке , а не только к следующей области , как только вы найдете совпадение.
Код
<?php
$domains = [
["domain" => "google.com"],
["domain" => "google.se"]
];
$rows = [
["product" => "Product 1 - Test purposes 1"],
["product" => "Product 2 - Test purposes 2 google.com"],
["product" => "Product 2 - Test purposes 2 google.se"],
];
$table = [];
# loop through all rows from the database
foreach($rows as $id => $row){
# 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[$id]['product'] = $trimmed;
continue 2;
//As soon as you hit a match, go to the next *row*.
//Don't try to match any more domains.
} else {
$table[$id]['product'] = $row['product'];
}
}
}
var_dump($table);
Предостережения
Предполагается, что у вас есть только один домен, соответствующий каждой строке.