【问题标题】:Replace placeholders in array with values from other array用其他数组中的值替换数组中的占位符
【发布时间】:2013-07-30 13:26:43
【问题描述】:

我有 2 个数组,其中一个带有占位符,它们是另一个数组中的键

arr1 = array(
    "id"       => "{{verticalId}}",
    "itemPath" => "{{verticalId}}/{{pathId}}/");

arr2 = array(
        "verticalId" => "value1",
        "pathId"     => "value2");

那么我如何在 arr1 上运行并将占位符替换为来自 arr2 的值?

【问题讨论】:

    标签: php regex arrays placeholder


    【解决方案1】:
    foreach ($arr1 as $key => &$value) {
        $value = preg_replace_callback('/\{\{(.*?)\}\}/', function($match) use ($arr2) {
            return $arr2[$match[1]];
        }, $value);
    }
    

    【讨论】:

      【解决方案2】:

      当然,这是一种方法。不过它需要一点爱,还有 PHP 5.3+

      <?php
      $subject = array(
          'id' => '{{product-id}}'
      );
      
      $values = array(
          'product-id' => 1
      );
      
      array_walk($subject, function( & $item) use ($values) {
          foreach($values as $template => $value) {
              $item = str_replace(
                  sprintf('{{%s}}', $template),
                  $value,
                  $item
              );
          }
      });
      
      var_dump(
          $subject
      );
      

      【讨论】:

        【解决方案3】:
        • 在@Barmar 的答案中循环目标数组不是(也不是在 2013 年)。数组可以作为preg_replace_callback() 函数的$subject。

        • 您可以从 PHP 7.4 开始使用自动访问父作用域的箭头函数形式。

        • 您不需要转义模式中的大括号。仅当括号内容是精确数字时,最后一个左括号才需要转义,例如 {\{300}}

        • 我一般不建议在正则表达式中使用.*,但我会想出一个规则,即{{ }} 中的字符只能是\w+

        最新答案:

        $arr1 = preg_replace('/{{\w+}}/', fn($m) => $arr2[$m[1]], $arr1);
        

        【讨论】:

          猜你喜欢
          • 2017-12-17
          • 1970-01-01
          • 2019-02-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-08
          相关资源
          最近更新 更多