PHP - регулярное выражение для удаления доменного имени из строки

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
2
задан B_CooperA 5 March 2019 в 07:27
поделиться

2 ответа

Вот один из способов сделать это, просто установите переменную $ 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;
}
0
ответ дан Stephanie Temple 5 March 2019 в 07:27
поделиться

Резюме

Это красивый. Вам понравится ответ.

Добавьте следующую строку перед } 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);

Предостережения

Предполагается, что у вас есть только один домен, соответствующий каждой строке.

https://3v4l.org/Oo2Ie

0
ответ дан dearsina 5 March 2019 в 07:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: