Вы используете preg_quote
не в том месте, оно предназначено для экранирования символов в шаблоне, а не в тестовой строке (см. руководство ). Измените свой код на этот, и он прекрасно работает:
foreach ($PregArray as $key_1 => $val_1) {
echo "\n--------------";
foreach ($array as $key_2 => $val_2) {
if (preg_match('~' . preg_quote($val_1) . '~', $key_2)) {
echo "\nOK => $val_1 - $key_2";
break;
}
else {
echo "\nNOK !!! => $val_1 - $key_2";
}
}
}
Вывод:
--------------
OK => date:1111aaa - attract (step-date:1111aaa)
--------------
NOK !!! => :222aaa - attract (step-date:1111aaa)
OK => :222aaa - type (step-date:222aaa)
--------------
NOK !!! => @odia tvled - attract (step-date:1111aaa)
NOK !!! => @odia tvled - type (step-date:222aaa)
OK => @odia tvled - @odia tvled
Демонстрация на 3v4l.org