为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 PHP 查找和替换字符串中的多个值

如何使用 PHP 查找和替换字符串中的多个值

PHP
FFIVE 2021-11-26 14:57:13
我正在构建一个模板系统,该系统使用预先确定的字段(命名字段 1 - 10)和相应的表单来切换这些字段与用户表单数据。我一直在玩 preg_replace 和 str_replace 但不确定如何正确实现此功能,因为我以前从未使用过它。本质上,系统的工作原理是首先上传一个“模板”,它是一串 html 格式,如下所示'<div><h1>{field1}</h1><h2>{field1}</h2></div>'在一个单独的函数中,我想用通过用户表单提交的字符串替换 '{field1}' 和 '{field2}' 值。到目前为止,我正在提取数据,如下所示:对于模板:$html = Templates::where('id', '=', $templateId)->get('html');对于表单数据:$field1 = $request->input('field_1');$field2 = $request->input('field_2');然后我想做一些类似于下面的代码,但不确定语法。因为在我将每个字段从一到十手动编写为单独的函数之前,我没有使用过 preg_replace。理想情况下,我希望能够循环遍历从 1 到 10 的每个字段,检查它们是否在 $html 中显示为 '{field#}' 如果模板中存在该字段,则替换为表单数据,如果不只是忽略它。为了节省为每个单独的字段重新编写代码。当前更换尝试:$htmlPrep =  preg_replace('{field1}', $field1, $html);$htmlPrep =  preg_replace('{field2}', $field2, $html);在函数中替换字符串的那些区域,而不是在视图中将它们渲染到位的原因是,fields1-10 和生成系统首先需要为多个模板工作,这些模板将有任意数量的字段限制为最多十个,其次包含组合数据结果的 $htmlPrep 变量不会被渲染,而是发送到带有一些 CSS 的 API 以生成和返回图像。所以预期的结果(使用 'a' 和 'b' 作为用户输入表单值)将是一个名为 $htmlPrep 的新变量,其中包含: '<div><h1>a</h1><h2>b</h2></div>'.  提前致谢。
查看完整描述

2 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

我是个傻瓜,忽略了代码逻辑中一个相当简单的错误。


所以我试图将所有值插入一个字符串。但是每次我为一个变量运行字符串替换时,我都使用原始 html 模板“$html”而不是更新的“$htmlPrep”,因为我已经编写了一行 field3 替换代码,而我的测试模板中没有 field3它将使用原始 $html 查找 '{field3}' 找不到它,然后将没有替换的原始字符串返回到我的新变量中。


简而言之,


这个:


$htmlPrep =  str_replace('{field1}', $field1, $html);

$htmlPrep =  str_replace('{field2}', $field2, $html);

$htmlPrep =  str_replace('{field3}', $field3, $html);

应该是这样的:


$htmlPrep =  str_replace('{field1}', $field1, $html);

$htmlPrep =  str_replace('{field2}', $field2, $htmlPrep);

$htmlPrep =  str_replace('{field3}', $field3, $htmlPrep);


查看完整回答
反对 回复 2021-11-26
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

当然你可以使用:

$htmlPrep = str_replace('{field1}', $field1, $html);

代替:

$htmlPrep = preg_replace('{field1}', $field1, $html);


查看完整回答
反对 回复 2021-11-26
  • 2 回答
  • 0 关注
  • 241 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信