php - PHP 类中的双大括号 - 如何使用它们从 2 个字符串生成随机字符串并返回值?

标签 php random generator curly-braces

我偶然发现了一个脚本,它可以根据数组中两种不同类型的单词生成随机名称。代码如下:

    protected static $techTerms = array('AddOn', 'Algorithm', 'Architect', 'Array', 'Asynchronous', 'Avatar', 'Band', 'Base', 'Beta', 'Binary');

    protected static $culinaryTerms = array('Appetit', 'Bake', 'Beurre', 'Bistro', 'Blend', 'Boil', 'Bouchees', 'Brew', 'Buffet', 'Caffe', 'Caffeine', 'Cake');

    protected static $companyNameFormats = array(
        '{{techTerm}}{{culinaryTerm}}',
        '{{techTerm}}{{techTerm}}',
        '{{culinaryTerm}}{{techTerm}}'
    );

    public static function techTerm()
    {
        return static::randomElement(static::$techTerms);
    }

    public static function culinaryTerm()
    {
        return static::randomElement(static::$culinaryTerms);
    }

    public function companyName()
    {
        $format = static::randomElement(static::$companyNameFormats);

        return $this->generator->parse($format);
    }

基本上,脚本应该创建并返回 $companyNameFormats 中定义的随机单词组合。这个脚本需要 Faker\Factory,但我想让它独立。此时,有2个问题:

randomElement 作为未定义方法,generator->parse 作为 在 null 上调用成员函数 parse()

我已设法修改脚本并使其正常工作,但我感兴趣的是如何使用 $companyNameFormats 中给出的 {{}} 并返回结果而不使用外部图书馆?

修改后的脚本如下:

    protected static function companyNameFormats()
    {
        $techArray = [];
        $techArray[] = self::techTerm();
        $culinaryArray = [];
        $culinaryArray[] = self::culinaryTerm();

        $result = array(
            array_merge($techArray, $culinaryArray),
            array_merge($techArray, $culinaryArray),
            array_merge($culinaryArray, $techArray),
            array_merge($techArray, $culinaryArray),
            array_merge($culinaryArray, $techArray)
        );

        return $result;
    }

    public static function techTerm()
    {
        $techTermKey = array_rand(static::$techTerms, 1);
        $techTermValue = static::$techTerms[$techTermKey];

        return $techTermValue;
    }

    public static function culinaryTerm()
    {
        $culinaryTermsKey = array_rand(static::$culinaryTerms, 1);
        $culinaryTermsValue = static::$culinaryTerms[$culinaryTermsKey];

        return $culinaryTermsValue;
    }

    public function companyName()
    {
        $companyNameKey = array_rand(static::companyNameFormats(), 1);
        $companyNameValue = static::companyNameFormats()[$companyNameKey];

        return $companyNameValue;
    }

最佳答案

他们可能正在做类似 preg_replace 的事情。

快速而肮脏的例子:

class Foo {

protected static array $foods = ["Pie", "Cake", "Yoghurt"];
protected static array $animals = ["Dog", "Cat", "Giraffe"];

protected static array $formats = [
    "{{food}} {{animal}}", 
    "{{animal}} {{food}}"
];

public function get():string{
    $format = $this->getRandomElement(self::$formats);

    
    $format = preg_replace(
        "/{{animal}}/",
        $this->getRandomElement(self::$animals),
        $format
    );
    
    return preg_replace(
        "/{{food}}/",
        $this->getRandomElement(self::$foods),
        $format
    );
}

protected function getRandomElement(array $elements):string{
    return $elements[random_int(0, count($elements) - 1)];
}
}

echo (new Foo())->get(); // Cat Yoghurt

关于php - PHP 类中的双大括号 - 如何使用它们从 2 个字符串生成随机字符串并返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68981503/

相关文章:

php - 印度卢比符号未在 Windows 上显示 (7,8) 即使在 Linux 上也显示

php - while循环多次显示一条记录php和mysql问题

python - 随机数字列表并将它们相加

python - 在倒数第二次迭代中停止生成器的 for 循环

python - 如何在 Python 中有效计算可迭代位的 md5 和?

python - 使用 python 生成器高效创建 scipy.lil_matrix

php - DOMPDF渲染动态表缓慢的解决方案

php - 在 PHP 中正确快速地进行 TELNET 的方法。套接字或 curl

ruby - 生成一个随机数和另一个与第一个数有一定边距的随机数

C++ 多程序问题(rand、转换、崩溃)