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);


