用不同的值替换多个值

时间:2013-06-08 07:33:11

标签: php

<?php
$status = '@abc are @cde and @fgh';
$values = array("@valuesA", "@valuesB", "@valuesC");
echo $status = preg_replace_callback("/(\s+|^)@\S+/", function($matches) use ($values) { return $values[array_rand($values)]; }, $status);
?>

如何在没有重复值的情况下替换不同的值, 我希望输出像这样:“@ valuesA是@valuesB和@valuesC” 按顺序

3 个答案:

答案 0 :(得分:0)

$status = '@abc are @cde and @fgh';
$a1 = array('@abc', '@cde', '@fgh');
$a2 = array('@valuesA', '@valuesB', '@valuesC');

$new_status = str_replace($a1 , $a2 , $status );

使用str_replace非常简单,只需映射原始值和替换值。

答案 1 :(得分:0)

最简单的方法是使用shuffle。这样,值的数量保持不变,并且不会重复。

$status = '@abc are @cde and @fgh';
$values = array("@valuesA", "@valuesB", "@valuesC");

shuffle($values);

使用简单的字符串替换更好:

$xlat = array(
    '@abc'   => $valueA,
    '@cde'   => $valueB,
...);

$result = str_replace(array_keys($xlat),
                      shuffle(array_values($xlat)),
                      $status);

(我最初认为这可以通过实施Durstenfeld算法或“ Knuth's Shuffle ”完成,但这需要维护与初始{相同>的状态向量。 {1}}向量。所以,当可以完成 - here's how - 时,它实际上 效率低于就地版本。)< / p>

答案 2 :(得分:0)

您似乎正在尝试创建自己的sprintf版本:

$status = '%s are %s and %s';
$new_status = sprintf($status, '@valuesA', '@valuesB', '@valuesC');
echo $new_status;