Spinner问题 - PHP foreach

时间:2011-03-22 18:31:42

标签: php foreach return

我有一个问题,我找到了一个脚本。

该脚本如下所示:

function spin($var){
$words = explode("{",$var);
foreach ($words as $word)
{
    $words = explode("}",$word);
    foreach ($words as $word)
    {
        $words = explode("|",$word);
        $word = $words[array_rand($words, 1)];        
        echo $word." ";

    }

}
}

$text = "Digitalpoint.com is {the best forum|a great Forum|a wonderful Forum|a perfect Forum} {123|some other sting}";
spin($text);

我想自定义脚本以返回结果的值。

示例:

$spin = spin($text);
echo $spin;

我试图通过

生成结果变量
$output = $output + $word." ";
return $output;

然后

$spin = spin($text);
echo $spin;

但我总是得到结果“0”......任何人都可以为这个问题提出一个聪明的解决方案吗?我期待任何提示/提示,提前谢谢!

5 个答案:

答案 0 :(得分:1)

这一位表示$ output是$ output和$ word的总和:

$output = $output + $word." ";
return $output;

因为它们不是数字,所以返回0。

尝试使用以下语句:

$output .= $word . " ";
return $output;

答案 1 :(得分:1)

试试这个。 spun函数未返回值。我们只是将结果附加到字符串echo上并返回它,而不是使用$spun

function spin($var){
$spun = "";

$words = explode("{",$var);
foreach ($words as $word)
{
    $words = explode("}",$word);
    foreach ($words as $word)
    {
        $words = explode("|",$word);
        $word = $words[array_rand($words, 1)];        
        $spun .= $word." ";
    }
}

return $spun;
}

答案 2 :(得分:1)

问题不在您提供的代码中,而是在您稍后指定的return语句中。

$output .= $word." ";
return $output;

答案 3 :(得分:0)

我更改了函数,以便您不会复制变量名称

function spin($var){
  $words = explode("{",$var);
  foreach ($words as $word)
  {
    $words2 = explode("}",$word);
    foreach ($words2 as $word2)
    {
      $words3 = explode("|",$word2);
      $word3 = $words3[array_rand($words3, 1)];
      echo $word3." ";

    }
  }
}

我似乎从文本中得到随机短语。这就是你想要的吗?

答案 4 :(得分:0)

只需preg_replace_callback

即可完成此操作
function spin($text)
{
    return preg_replace_callback('/\{(.+?)\}/',
                                 function($matches) {
                                    $values = explode('|', $matches[1]);
                                    return $values[array_rand($values)];
                                 },
                                 $text);
}