PHP случайным образом заменяет слова - PullRequest
1 голос
/ 27 февраля 2012

У меня есть массив с именем $ featuresSEO, в котором есть несколько слов, например:

Array (
    [0] => Japan 
    [1] => Japanese 
    [2] => Tokyo 
    [3] => Yokohama 
    [4] => Osaka 
    [5] => Asian 
    [6] => Nagoya 
) 

У меня есть строка, подобная следующей:

 Searching the |*-*| Dating membership database is the key to locating |*-*| people
 you would be interested in. You can search for |*-*| Singles including |*-*| Women
 and |*-*| Men in any location worldwide. Join now to search for |*-*| Singles.

Я пытался заменить экземпляры |*-*| случайными словами из массива. Я пробовал str_replace (), но не смог заставить работать случайный аспект.

Может кто-нибудь подтолкнуть меня в правильном направлении?

1012 * ТНХ *

Ответы [ 4 ]

2 голосов
/ 27 февраля 2012

попробуйте

$string = ' Searching the |*-*| Dating membership database is the key to locating |*-*| people
 you would be interested in. You can search for |*-*| Singles including |*-*| Women
 and |*-*| Men in any location worldwide. Join now to search for |*-*| Singles.';

$words = array('Japanese', 'Tokyo', 'Asian');

$placeholder = '|*-*|';
$pos = null;

while(null === $pos || false !== $pos) {
    $pos = strpos($string, $placeholder);
    $string = substr_replace($string, $words[rand(0, count($words)-1)], $pos, strlen($placeholder));

}

echo $string;

первое слово стало неожиданным

2 голосов
/ 27 февраля 2012

Замените их по одному.Этот заменит каждый случай случайным словом.Вы можете видеть одно и то же слово из $wordarray несколько раз, так как оно каждый раз выбирает 1 случайным образом.

for ($i = 0; $i < substr_count($string, '|*-*|'); $i++){
     $string = preg_replace('/\|\*-\*\|/',$wordarray[rand(0,count($wordarray)-1)],$string, 1);
}

Хотите использовать каждое слово только один раз?Перемешать массив и перебрать его:

shuffle($wordarray);
foreach ($wordarray as $word){
    $string = preg_replace('/\|\*-\*\|/',$word,$string,1);
}
0 голосов
/ 27 февраля 2012

Код для замены только первого совпадения заимствован из здесь .Следующий код использует каждое слово из списка только один раз:

$wordlist = array(
    'Japan',
    'Japanese',
    'Tokyo',
    'Yokohama',
    'Osaka',
    'Asian',
    'Nagoya'
);
$string = "
Searching the |*-*| Dating membership database is the key to locating |*-*| people
you would be interested in. You can search for |*-*| Singles including |*-*| Women
and |*-*| Men in any location worldwide. Join now to search for |*-*| Singles.
";
$replace = '|*-*|';
while(true){
    $index = strpos($string, $replace);
    if($index === false){
        // ran out of place holder strings
        break;
    }
    if(count($wordlist) == 0){
        // ran out of words
        break;
    }
    $word = array_splice($wordlist, rand(0, count($wordlist) - 1), 1);
    $string = substr_replace($string, $word[0], $index, strlen($replace));
}
echo $string;
0 голосов
/ 27 февраля 2012

Попробуйте это

<?php
    $array = array("Japan","Japanese","Tokyo","Yokohama","Osaka","Asian","Nagoya");
    $a = array_rand($array);
    $string= "abc|*-*|";
    echo str_replace("|*-*|", $array[$a], $string);
?>
...