我希望这个问题还没有在另一个主题中得到解决 - 做了一些搜索,却一无所获。
我正在编写一个函数来以字符串的形式创建一些随机注释。它将用于生产中的循环上下文中。我写了一个while循环来测试函数,我得到了一些奇怪的输出。它在第一个循环中运行良好,但每个后续循环都会将字符串截断为它们的第一个字符。
<?PHP
$prefix=array();
$prefix[]="Wow! That's";
$prefix[]="That's";
//...
$prefix[]="Amazing image. So";
$prefix[]="Wonderful image. So";
$suffix=array();
$suffix[]="amazing";
$suffix[]="awesome";
//...
$suffix[]="fabulous";
$suffix[]="historic";
$punctuation=array();
$punctuation[]='!';
$punctuation[]='!!';
//...
$punctuation[]='.';
$punctuation[]='...';
function comment() {
global $prefix;
$prefix_max=count($prefix)-1;
$rand=rand(0,$prefix_max);
$prefix=$prefix[$rand];
global $suffix;
$suffix_max=count($suffix)-1;
$rand=rand(0,$suffix_max);
if(strpos(strtolower($prefix),strtolower($suffix[$rand])) > 0) {
$rand=$rand+1;
if($rand > $suffix_max) {
$rand=0;
}
}
$suffix=$suffix[$rand];
if(substr($prefix, -1) == '.' || substr($prefix, -1) == '!') {
$suffix=ucfirst($suffix);
}
$rand=rand(1,100);
if($rand < 18) {$suffix=strtoupper($suffix);}
global $punctuation;
$punctuation_max=count($punctuation)-1;
$rand=rand(0,$punctuation_max);
$punctuation=$punctuation[$rand];
$comment=$prefix.' '.$suffix.$punctuation;
return $comment;
}
$i=0;
while($i < 70) {echo comment()."\r\n"; $i++;}
?>
这是循环的输出:
Thank you for sharing! That's wonderful...
T w.
T w.
T w.
T w.
T w.
T w.
T w.
T W.
T W.
T W.
T W.
...
我期待完全不同的字符串,比如循环中的第一个返回值。关于为什么会被截断的任何想法?
答案 0 :(得分:5)
这是因为您正在使用global,而您的comments()函数正在将数组更改为字符串
e.g
global $prefix; // references the global variable $prefix
// which is initially defines as an array
$prefix_max=count($prefix)-1;
$rand=rand(0,$prefix_max);
$prefix=$prefix[$rand]; // changes the value of the global variable
// $prefix to a string
这是强烈劝阻使用全球的主要原因之一
答案 1 :(得分:0)
您正在覆盖前缀和后缀数组。 试试这个:
<?PHP
$prefixArray=array();
$prefixArray[]="Wow! That's";
$prefixArray[]="That's";
//...
$prefixArray[]="Amazing image. So";
$prefixArray[]="Wonderful image. So";
$suffixArray=array();
$suffixArray[]="amazing";
$suffixArray[]="awesome";
//...
$suffixArray[]="fabulous";
$suffixArray[]="historic";
$punctuation=array();
$punctuation[]='!';
$punctuation[]='!!';
//...
$punctuation[]='.';
$punctuation[]='...';
function comment() {
global $prefixArray;
$prefix_max=count($prefixArray)-1;
$rand=rand(0,$prefix_max);
$prefix=$prefixArray[$rand];
global $suffixArray;
$suffix_max=count($suffixArray)-1;
$rand=rand(0,$suffix_max);
if(strpos(strtolower($prefix),strtolower($suffixArray[$rand]))!==FALSE) {
$rand=$rand+1;
if($rand > $suffix_max) {
$rand=0;
}
}
$suffix=$suffixArray[$rand];
if(substr($prefix, -1) == '.' || substr($prefix, -1) == '!') {
$suffix=ucfirst($suffix);
}
$rand=rand(1,100);
if($rand < 18) {$suffix=strtoupper($suffix);}
global $punctuation;
$punctuation_max=count($punctuation)-1;
$rand=rand(0,$punctuation_max);
$punctuation=$punctuation[$rand];
$comment=$prefix.' '.$suffix.$punctuation;
return $comment;
}
$i=0;
while($i < 70) {echo comment()."<BR>"; $i++;}
?>