【问题标题】:Replace Array Callback替换数组回调
【发布时间】:2012-03-04 20:51:53
【问题描述】:

我有一个类似的字符串:

"Hello ? my name is ? and i am ? years old." 

每个“?”都是一个变量,我想用一个数组替换每个变量。所以我有这个数组:

$data = array('Mister,','Tom','30');

所以我正在寻找一种干净的方法来转换所有 ? 通过其同样的数组索引,以便我得到:

“您好,先生,我叫汤姆,今年 30 岁。”

我还想在替换每个数组条目时将ucfirst() 之类的函数传递给它们。

有人知道怎么做吗?

【问题讨论】:

    标签: php arrays callback replace


    【解决方案1】:

    使用 preg_replace_callback:

    $str = "Hello ? my name is ? and i am ? years old.";
    $data = array('Mister,','Tom','30');
    $str = preg_replace_callback('/\?/', function($match) use(&$data) {
        return ucfirst(array_shift($data));
    }, $str);
    

    【讨论】:

      【解决方案2】:

      str_replace 可以做到这一点(结合array_map

      $array = array('Mister,', 'Tom', '30');
      $new_string = str_replace(array('?', '?', '?'),
          array_map(function($v) { return ucfirst($v); }, $array),
          $old_string
      );
      

      【讨论】:

      • 这不起作用,因为它取代了所有出现的 ?与先生
      • 它替换所有出现的 ?带数组
      • @NikoSams:我的错,这只适用于另一个方向(搜索是一个数组,替换一个字符串)。
      【解决方案3】:
      【解决方案4】:
      $string = 'String ? etc etc';
      $string = preg_replace("/?/",array_shift($data), $string, 1);
      $string = preg_replace("/?/",array_shift($data), $string, 1);
      $string = preg_replace("/?/",array_shift($data), $string, 1);
      
      echo $string
      

      【讨论】:

      • 为什么投反对票?这是最简单的代码。它可以很容易地放在一个循环中。最后的 1 是一个限制器,每次只说一次。
      • 这不是我的反对意见。但我认为这个人认为它重复了太多。
      • 哦,我想我应该把它放到一个循环中。谢谢!这是我的赞成票;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      相关资源
      最近更新 更多