簡體   English   中英

用其他數組中的值替換數組中的占位符

[英]Replace placeholders in array with values from other array

我有 2 個帶有占位符的數組,它們是另一個數組中的鍵

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

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

那么如何在arr1運行並用來自arr2值替換占位符?

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

當然,這是一種方法。 它需要一點愛,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
);
  • 在@Barmar 的答案中循環目標數組不是(並且在 2013 年也沒有)。 數組被允許作為preg_replace_callback()函數的 $subject 。

  • 從 PHP 7.4 開始,您可以使用可以自動訪問父作用域的箭頭函數形式。

  • 您不需要轉義模式中的大括號。 如果括號內容是確切的數字,則只需要轉義最后一個左括號,例如{\\{300}}

  • 我通常不建議在正則表達式中使用.* ,但我只是想出了一個規則,即{{ }}中的字符只能是\\w+

最新回答:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM