preg_replace و preg_filter رفتار مشابه ای دارند با این تفاوت که توی فیلتر اگه اون الگو نباشه چیزی بهمون برنمیگردونه ولی توی ریپلیس در هر صورت یه مقدار بهمون برمیگرده
مثال زیر رو ببین
$subject = ['mehdi','ali','hossein'];
$pattern = '/m/';
$replace = 'M';
dump(preg_filter($pattern, $replace, $subject));
dump(preg_replace($pattern, $replace, $subject));شاید پاسخ شما همینجا باشد