PHP中的mt_rand有什么问题?

时间:2022-08-25 18:23:49

I tried to make a simple name generator. Help me to identify why it's not working. I think it's because of mt_rand function. Sorry if question seems banal or irrelevant, I'm first time here and new to programming. Here's the code:

我试着制作一个简单的名称生成器。帮助我找出它无法正常工作的原因。我认为这是因为mt_rand函数。对不起,如果问题看起来平庸或无关紧要,我是第一次来这里和编程新手。这是代码:

<?php
    echo 'Ovo je moja verzija Polumenta generatora';
    $prvo = 'bcdfghtnjpknmlrjdzdjs';
    $drugo = 'aeiou';
    $trece = 'bcdfghtnjpknmlrjsdzdj';
    $cetvrto = 'uo';
    $prvos = mt_rand($prvo[0],$prvo[17]);
    $drugos = mt_rand($drugo[0],$drugo[4]);
    $treces = mt_rand($trece[0],$trece[17]);
    $cetvrtos = mt_rand($cetvrto[0],$cetvrto[1]);
        echo $prvos.$drugos.$treces.$cetvrtos.' Polumenta'

?>

2 个解决方案

#1


mt_rand takes integers as arguments and returns an integer. You are trying to pass it characters and return characters. You should do something like:

mt_rand将整数作为参数并返回一个整数。您正在尝试传递字符并返回字符。你应该做的事情如下:

<?php
  echo 'Ovo je moja verzija Polumenta generatora';
  $prvo = 'bcdfghtnjpknmlrjdzdjs';
  $drugo = 'aeiou';
  $trece = 'bcdfghtnjpknmlrjsdzdj';
  $cetvrto = 'uo';
  $prvos = $prvo[mt_rand(0,strlen($prvo) - 1)];
  $drugos = $drugo[mt_rand(0,strlen($drugo) - 1)];
  $treces = $trece[mt_rand(0,strlen($trece) - 1)];
  $cetvrtos = $cetvrto[mt_rand(0,strlen($cetvrto) - 1)];
  echo $prvos.$drugos.$treces.$cetvrtos.' Polumenta'
?>

#2


You can make it in another way, using arrays and rand() function.

您可以使用数组和rand()函数以另一种方式创建它。

$chrs[0] = str_split('bcdfghtnjpknmlrjdzdjs'); // array of consonants
$chrs[1] = str_split('aeiou'); // array of vowels
$length = 8; // nick name length

Than generate random sequence of chars any length

比任何长度生成随机的字符序列

for($i = 0; $i < $length; $i++)
{
 $v_or_c = rand(0,1);
 if($v_or_c)
 {
  $nick_name .= $chrs[$v_or_c][rand(0, sizeof($chrs[$v_or_c]))];
 }
 else
 {
  $nick_name .= $chrs[$v_or_c][rand(0, sizeof($chrs[$v_or_c]))];
 }
}
echo ucfirst($nick_name); // ucfirst - to upper case first letter

#1


mt_rand takes integers as arguments and returns an integer. You are trying to pass it characters and return characters. You should do something like:

mt_rand将整数作为参数并返回一个整数。您正在尝试传递字符并返回字符。你应该做的事情如下:

<?php
  echo 'Ovo je moja verzija Polumenta generatora';
  $prvo = 'bcdfghtnjpknmlrjdzdjs';
  $drugo = 'aeiou';
  $trece = 'bcdfghtnjpknmlrjsdzdj';
  $cetvrto = 'uo';
  $prvos = $prvo[mt_rand(0,strlen($prvo) - 1)];
  $drugos = $drugo[mt_rand(0,strlen($drugo) - 1)];
  $treces = $trece[mt_rand(0,strlen($trece) - 1)];
  $cetvrtos = $cetvrto[mt_rand(0,strlen($cetvrto) - 1)];
  echo $prvos.$drugos.$treces.$cetvrtos.' Polumenta'
?>

#2


You can make it in another way, using arrays and rand() function.

您可以使用数组和rand()函数以另一种方式创建它。

$chrs[0] = str_split('bcdfghtnjpknmlrjdzdjs'); // array of consonants
$chrs[1] = str_split('aeiou'); // array of vowels
$length = 8; // nick name length

Than generate random sequence of chars any length

比任何长度生成随机的字符序列

for($i = 0; $i < $length; $i++)
{
 $v_or_c = rand(0,1);
 if($v_or_c)
 {
  $nick_name .= $chrs[$v_or_c][rand(0, sizeof($chrs[$v_or_c]))];
 }
 else
 {
  $nick_name .= $chrs[$v_or_c][rand(0, sizeof($chrs[$v_or_c]))];
 }
}
echo ucfirst($nick_name); // ucfirst - to upper case first letter