2011-03-24 78 views
1

我有文本块包含变量:文本与随机值替换变量

Hello my name is john #last# 

我有一个数组中的20个不同姓氏可以使用,我怎么能代替#最后#与数组中的随机姓氏?这意味着我怎么能#的念之间,并得到‘最后’,然后用它来确定从输入一个随机值抢哪个数组

+0

是这个一个家庭作业问题?如果是Jamal,给它一个作业标签,让人们给你额外的帮助。 – 2011-03-24 07:41:24

回答

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); 
+0

感谢您的回复!唯一的问题是#之间的单词可以是大约5个不同的单词,是否可以在#之间使用通配符并获取文本以查看要使用哪个数组? – jamal 2011-03-24 07:53:02

0

您可以通过用户sprintf

<?php 
    $str = 'Hello my name is john %s'; 
    printf($str, $name); 
?> 
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()方法来选择一个名字。

0

或者你可以使用preg_replace/ePREG_REPLACE_EVAL修改:

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

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