php - 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 中完全有效
解决方案
你是对的,在和之间rand(int $min, int $max)
生成一个随机整数,请参阅文档。$min
$max
并base_convert(string $num, int $from_base, int $to_base)
转换$num
from$from_base
到$to_base
,但$num
这里是一个字符串,因为十六进制和其他以 10 为底的数字也可以包含字符,而不仅仅是数字,请参阅文档。这也是此函数返回字符串的原因,即使在某些情况下它实际上不包含任何字母。
如果需要,PHP 还会将字符串转换为数字,例如下一个代码将输出124
为int
:
$a = "123";
var_dump($a+1);
在您的第一个示例中,即使是一个整数,当您从基数 10 调用到 36$number
时,PHP 也会帮您将其转换为字符串。base_convert
在您的第二个示例中,存在一个问题,因为输入$number="0977567"
包含 digit 9
,并且您希望将其从基数 8 转换为 10。但是 digit9
不存在于基数为 8 的数字中,只有从0
to 的数字7
。在这种情况下,PHP 会忽略无效字符9
,并且仅将077567
基数 8 转换为基数 10,这恰好是32631
.
请始终检查 PHP 警告以发现此类问题。在学习和测试时,最好设置好error_reporting(E_ALL);
这样您会收到每条消息。检查文档。
推荐阅读
- domain-driven-design - 我的集成测试是否应该重用持久性库来访问数据库?
- sharepoint - 隐藏 Sharepoint 2013 Web 部件,直到单击链接的图像
- codeigniter - Codeignaiter 2.2.0 严重性:注意 --> 试图获取非对象的属性
- amazon-s3 - 处理 AWS ELB 访问日志(从 S3 存储桶到 InfluxDB)
- web - 带有编辑器和预览的网站
- javascript - 添加 n 个数组的值
- c# - 如何在一张图片中添加更多凸包
- python - Plotly:如何从数据框中绘制桑基图?
- php - 使用站点地图重定向 301 url
- java - 在 JavaFX 中的 openstreetmap 上显示分层集群