preg_match - null считает как 1

уважаемые программисты!

Есть база:

введите сюда описание изображения

Есть foreach:

foreach ($bd_category as $v) {
    if (preg_match("/\b($v->params2)\b/u", $name) == 1) {
         $count_category[] = $v->id;
    }
   }

введите сюда описание изображения

Почему ID 39, params2 - null считается как == 1??? Как это исправить???

введите сюда код


Ответы (1 шт):

Автор решения: Александр К

Проблема в том, что при значении NULL в params2 регулярное выражение получается "/\b()\b/u" - оно находит любое пустое значение в строке.

Пример решения проблемы:

foreach ($bd_category as $v) {
    if ($v->params2 !== null
        && preg_match("/\b($v->params2)\b/u", $name) == 1
    ) {
        $count_category[] = $v->id;
    }
}

Полный пример:

$v1 = new stdClass();
$v1->id = 39;
$v1->params2 = null;

$v2 = new stdClass();
$v2->id = 67;
$v2->params2 = 'утепленный';

$v3 = new stdClass();
$v3->id = 78;
$v3->params2 = 'деловой';

$bd_category = [
    $v1,
    $v2,
    $v3
];

$name = 'жилет утепленный';
$count_category = [];

foreach ($bd_category as $v) {
    if ($v->params2 !== null
        && preg_match("/\b($v->params2)\b/u", $name) == 1
    ) {
        $count_category[] = $v->id;
    }
}

var_dump($count_category);
→ Ссылка