gpt4 book ai didi

php - 如何从单词列表中生成随机 slug

转载 作者:行者123 更新时间:2023-11-29 03:25:43 25 4
gpt4 key购买 nike

我正在尝试根据约 100 个单词的字典创建一个随机 slug。我想出了以下解决方案,但我一直在考虑它太久,无法判断它是否有效,也无法弄清楚如何正确测试它。

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;
}
}

我认为这段代码有效,但我也认为它可以变得更有效率,否则我可能想多了。我也可以像

这样简单
    do {
$words = self::getRandomSlugWords($limit);
$slugified = implode('-', $words);
} while (PlaylistModel::doesSlugAlreadyExist($slugified));

但是我正在尝试测试相同单词的不同组合,然后再用另一个对不同单词的请求对数据库执行 ping 操作(我正在使用 RAND() 来获得随机结果并试图将其最小化)。

感谢任何见解!谢谢!

最佳答案

我认为进行一次查询以获取 limit+N 个随机词是一种更好(更快、资源友好)的方法。例如,每当我们需要由 4 个元素组成的 slug 时,让我们选择 8 个单词。

SELECT slug FROM `slugs` ORDER BY RAND() LIMIT 8;

在这种情况下,我们将洗牌一个数组,其中包含我们将使用的项目的两倍 - 有 24 个 4 x 4 的排列,而有 1680 个 8 x 4 的排列 - 留给我们更多可能有效的 slugs 更少的查询.

在那种情况下,我们会有一个

public static function getRandomSlugs($limit)   
{
shuffle(self::$slugs); // 8 words from database
return array_slice(self::$slugs, 0, $limit); // we only need 4
}

并使用我们的方法

public function generateSlug($limit = 4)
{
do {
$slugs = self::getRandomSlugs($limit); // Get N slugs
$mySlug = implode('-', $slugs); // Join the elements
} while ($this->slugExists($mySlug));

return $mySlug;
}

检查 slug 是否已经被拿走可以通过几种方式完成;从列是您的 slug 的数据库中选择,或将表设置为唯一并检查插入数据时的返回。

无论如何,请记住保持方法简短、精确和简洁。

关于php - 如何从单词列表中生成随机 slug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36538936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com