2015-03-30 30 views
0
替换字符串参数与数组值

是否有一些原生的PHP接收字符串和数组作为参数,并替换数组的索引及其在字符串内的各自的值?用索引

喜欢的东西:

$myString = "{days} days left for {holiday}"; 
$params = array(
    "days" => 275, 
    "holiday" => "Christmas" 
); 
echo _some_function($myString, $params); 
//Outputs: "275 days left for Christmas" 
+1

在这里你去:http://php.net/manual/en/function.str-replace.php也许你可以惊喜自己和自己解决问题: d! – Rizier123 2015-03-30 21:18:35

+0

好点@ Rizier123 :)!但是如果输入字符串在“天”字中包含多于一次的情况会怎样?我更新了我的示例 – CarlosCarucce 2015-03-30 21:22:23

+1

“{days}”=> 275 – 2015-03-30 21:24:35

回答

1

这应该为你工作:

(这里我只是首先在密钥的周围添加分隔符,然后用strtr()来替换这些值)

<?php 

    $myString = "{days} days left for {holiday}"; 
    $delimiters = ["{", "}"]; 
    $params = [ 
     "days" => 275, 
     "holiday" => "Christmas" 
    ]; 

    function someCrazyFunction($myString, $params, $delimiters) { 
     foreach($params as $k => $v) { 
      $params[$delimiters[0] . $k . $delimiters[1]] = $v; 
      unset($params[$k]); 
     } 

     return strtr($myString, $params); 

    } 


    echo someCrazyFunction($myString, $params, $delimiters); 

?> 

输出:

275 days left for Christmas 
1
_some_function($myString, $params){ 
    foreach($params as $k=>$v) 
     $myString = str_replace("{".$k."}",$v,$mString); 
    return $myString; 
} 

-dont问:如果 “天” 拥有财产以后像 “假日” 为价值;)

0

谢谢大家的答案。 据@ Rizier123和@superduperawesomephpexpert评论:

$myString = "{days} days left for {holiday}"; 
$params = array(
    "days" => 275, 
    "holiday" => "Christmas" 
); 

$indexes = array_map(function($v){ 
    return '{'.$v.'}'; 
}, array_keys($params)); 

echo str_replace($indexes, $params, $myString); 
+0

好,只是为了提醒你,如果你使用'str_replace()'并假设你有'days => holiday123',那么'holiday'将会从'holiday => Christmas'中被替换,这就是为什么我使用'strtr'我的回答是,这不会发生,只是为了让你知道! (顺便说一句:很酷,你已经找到了自己的解决方案:) – Rizier123 2015-03-30 21:43:09

+0

感谢提示@ Rizier123。我会尽快接受你的答案。 (y) – CarlosCarucce 2015-03-30 21:51:15

+0

它可用:http://stackoverflow.com/a/29356672/3933332?! – Rizier123 2015-03-30 21:52:57