用随机值替换文本中的变量

时间:2011-03-24 07:33:31

标签: php

我有一个包含变量的文本块:

Hello my name is john #last# 

我在数组中有20个不同的姓氏可以使用,如何用数组中的随机姓氏替换#last#?意思是如何在#和s之间读取并获取“last”然后使用它来确定从哪个数组中获取并输入随机值

4 个答案:

答案 0 :(得分:1)

preg_replace_callback()可能是你的朋友。

基本示例:

$s="Hello my name is John #last#";

function random_name($m) {
    $a=array('Fos', 'Smith', 'Metzdenafbuhrer', 'the Enlightened');
    foreach ($m as $match) {
        return $a[array_rand($a)];
    }
}

$news=preg_replace_callback('/#last#/', 'random_name', $s);

更新:我为您创建了另一个示例,具有更大的灵活性:

$s="Hello #title#, my name is John #last#";

function random_name($m) {
    $a=array(
        'last' => array('Fos', 'Smith', 'Metzdenafbuhrer', 'the Enlightened'),
        'title' => array('Honey', 'Boss', ', I am your father'),
        );
    foreach ($m as $match) {
        $v=trim($match, '#');
        return $a[$v][array_rand($a[$v])];
    }
}

$news=preg_replace_callback('/(#[a-z]+#)/', 'random_name', $s);

答案 1 :(得分:0)

您可以像

一样使用sprintf
<?php
    $str = 'Hello my name is john %s';
    printf($str, $name);
?>

答案 2 :(得分:0)

<?php

$random_last_names = array("Smith", "Jones", "Davis");
$string = "Hello my name is john #last#";

$random_last_name_id = rand(0, count($random_last_names));

$new_string = preg_replace("/#last#/", $random_last_names[$random_last_name_id], $string);
?>

或者更好的是,使用像fabrik所说的printf,但你可以使用这个rand()方法来选择一个名字。

答案 3 :(得分:0)

或者您可以将preg_replace/e PREG_REPLACE_EVAL修饰符一起使用:

$str = '...' // your input text
$names = array('smith', 'brown', 'white', 'red');

echo preg_replace('/#last#/e', '$names[rand(0, count($names) - 1)]', $str);