首页 > 解决方案 > php中base_convert()如何创建随机字符串?

问题描述

我正在通过简短的练习自己学习 php,我通过这个小练习来生成随机的 11 个字符串

public function Random_string()
 {
        $number = rand(10e12, 10e16);
        echo base_convert($number, 10, 36);
   //Sample output=9n4jfyh18v9
 }

我认为该函数本身会生成字符串,但是当我使用以下值时,它不会生成任何字符串。

<?php
$number = "0977567";
echo base_convert($number,8,10);
//output=32631
?>

据我所知,rand()函数会生成随机数,而base_convert()函数会将数字从一个数基转换为另一个数。在这个过程中如何生成字符串?我很难理解这一点。如果有人能阐明它,那将是非常好的。谢谢你。

PS 第一个函数在 PHP 7 中显示错误,但在 PHP 5 中完全有效

标签: phpmath

解决方案


你是对的,在和之间rand(int $min, int $max)生成一个随机整数请参阅文档$min$max

base_convert(string $num, int $from_base, int $to_base)转换$numfrom$from_base$to_base,但$num这里是一个字符串,因为十六进制和其他以 10 为底的数字也可以包含字符,而不仅仅是数字,请参阅文档。这也是此函数返回字符串的原因,即使在某些情况下它实际上不包含任何字母。

如果需要,PHP 还会将字符串转换为数字,例如下一个代码将输出124int

$a = "123";
var_dump($a+1);

在您的第一个示例中,即使是一个整数,当您从基数 10 调用到 36$number时,PHP 也会帮您将其转换为字符串。base_convert

在您的第二个示例中,存在一个问题,因为输入$number="0977567"包含 digit 9,并且您希望将其从基数 8 转换为 10。但是 digit9不存在于基数为 8 的数字中,只有从0to 的数字7。在这种情况下,PHP 会忽略无效字符9,并且仅将077567基数 8 转换为基数 10,这恰好是32631.

请始终检查 PHP 警告以发现此类问题。在学习和测试时,最好设置好error_reporting(E_ALL);这样您会收到每条消息。检查文档


推荐阅读