約100語の辞書に基づいてランダムスラッグを作成しようとしています。私は以下の解決策を考案しましたが、それについては長すぎると考えており、効率的かどうか、適切にテストする方法を理解することができません。単語リストからランダムスラッグを生成する方法
class SlugModel
{
/**
* Get random words from the slug_words table
* @param int $limit how many words should be fetched
* @return array the array of random words
*/
public static function getRandomSlugWords($limit)
{
// returns random words in an array. Ex:
return array('pop', 'funk', 'bass', 'electro');
}
/**
* Generate a random slug based on contents of slug_words
* @return str the slug
*/
public static function generateSlug($limit=4)
{
do {
$words = self::getRandomSlugWords($limit);
$slugified = implode('-', $words);
if(PlaylistModel::doesSlugAlreadyExist($slugified)) // returns true or false
{
// try a few different combinations before requesting new words from database
for ($i=0; $i < $limit; $i++)
{
$words[] = array_shift($words); // take the first and shift it to the end
$slugified = implode('-', $words);
if(!PlaylistModel::doesSlugAlreadyExist($slugified)) // break only if it does NOT exist
break;
}
}
} while (PlaylistModel::doesSlugAlreadyExist($slugified));
return $slugified;
}
}
私はこのコードがうまくいくと思うが、私はまた、より効率的にすることができるか、私はそれをoverthinkingすることができると思います。私はまた、
do {
$words = self::getRandomSlugWords($limit);
$slugified = implode('-', $words);
} while (PlaylistModel::doesSlugAlreadyExist($slugified));
として、それは同じくらい簡単かもしれない。しかし、私は(私が無作為化結果を得るために、RAND()を使用したとしようとしている別の単語の別の要求をデータベースにpingを実行する前に、同じ単語の異なる組み合わせをテストしようとしていますこれを最小にする)。
洞察力がありがとう!ありがとうございました!
ありがとうございました!これは役に立ちます。シャッフルしても、同じ順列を返す可能性はありますか?それはおそらくありませんが、まだ可能ですか? – cwal
です。それでも、これはスラッグをチェックするためにdo whileステートメントを使用している理由です。 –