2

私は調査し、ニーズをランダムに可能性の配列に置き換える最良の方法を見つける必要があります。

すなわち:

$text = "Welcome to [city]. I want [city] to be a random version each time. [city] should not be the same [city] each time.";

$keyword = "[city]";
$values = array("Orlando", "Dallas", "Atlanta", "Detroit", "Tampa", "Miami");

$result = str_replace("[$keyword]", $values, $text);

その結果、すべてのオカレンスに都市の「配列」が含まれます。すべての都市のオカレンスをランダムな from $values に置き換える必要があります。私はこれを可能な限りクリーンな方法で行いたいと思っています。これまでの私の解決策はひどいものです(再帰的)。これに対する最善の解決策は何ですか?ありがとうございました!

4

6 に答える 6

7

preg_replace_callbackを使用して、一致ごとに関数を実行し、置換文字列を返すことができます。

$text = "Welcome to [city]. I want [city] to be a random version each time. [city] should not be the same [city] each time.";

$keyword = "[city]";
$values = array("Orlando", "Dallas", "Atlanta", "Detroit", "Tampa", "Miami");

$result = preg_replace_callback('/' . preg_quote($keyword) . '/', 
  function() use ($values){ return $values[array_rand($values)]; }, $text);

サンプル$result

アトランタへようこそ。ダラスを毎回ランダムバージョンにしたいと思います。マイアミは毎回同じアトランタであってはなりません。

于 2012-06-11T02:29:25.603 に答える
5

preg_replace_callbackで使用できますarray_rand

<?php
$text = "Welcome to [city]. I want [city] to be a random version each time. [city] should not be the same [city] each time.";

$values = array("Orlando", "Dallas", "Atlanta", "Detroit", "Tampa", "Miami");

$result = preg_replace_callback("/\[city\]/", function($matches) use ($values) { return $values[array_rand($values)]; }, $text);

echo $result;

ここの例。

于 2012-06-11T02:33:07.287 に答える
1

ここに別のアイデアがあります

$text = "Welcome to [city]. I want [city] to be a random version each time. [city] should not be the same [city] each time.";

$pattern = "/\[city\]/";
$values = array("Orlando", "Dallas", "Atlanta", "Detroit", "Tampa", "Miami");

while(preg_match($pattern, $text)) {
        $text = preg_replace($pattern, $values[array_rand($values)], $text, 1);
}

echo $text;

そしていくつかの出力:

Welcome to Orlando. I want Tampa to be a random version each time. Miami should not be the same Orlando each time.
于 2012-06-11T03:02:25.423 に答える
0

配列を使用してテキストを置き換えている$valuesため、結果は「配列」という単語だけになります。置換は文字列でなければなりません。

array_rand()配列からランダムなエントリを選択するために使用できます。

$result = str_replace($keyword, $values[array_rand($values)], $text);

結果は次のようになります。

Welcome to Atlanta. I want Atlanta to be a random version each time. Atlanta should not be the same Atlanta each time.
Welcome to Orlando. I want Orlando to be a random version each time. Orlando should not be the same Orlando each time.

行ごとに都市をランダムにしたい場合は、@PaulP.ROの回答を確認してください。

于 2012-06-11T02:24:28.173 に答える
-1

これを試してくださいhttp://codepad.org/qp7XYHe4

<?
$text = "Welcome to [city]. I want [city] to be a random version each time. [city] should not be the same [city] each time.";

$keyword = "[city]";
$values = array("Orlando", "Dallas", "Atlanta", "Detroit", "Tampa", "Miami");

echo $result = str_replace($keyword, shuffle($values)?current($values):$values[0], $text);
于 2012-06-11T02:31:30.520 に答える