gpt4 book ai didi

php - 在 PHP 5.2 中重新获得常量伪随机数

转载 作者:可可西里 更新时间:2023-11-01 00:11:02 24 4
gpt4 key购买 nike

我在 foo.php 和 bar.php 中包含相同的“random.inc”。对于每一个,我都想要可重现的“随机”结果。

所以在 foo.php 中我总是想要一组数字和/或关键字。在 bar.php 另一个。重新加载时不应更改。这就是我所说的contant 伪随机的意思。这就是我在 url 上播种的原因。但是,对于单个数字以及每次重新加载的数组 pickson,我仍然会得到不同的结果。这是完整的 php 文件:

<?
header('Content-Type: text/plain');
$seed = crc32( $_SERVER['REQUEST_URI'] );
echo "phpversion: ".phpversion()."\nseed: $seed\n";
srand( $seed ); // (seed verified to be contant as expected)

// neither single values nor array pics turn out deterministic
echo ''.rand(0,100).' '.rand(0,100).' '.rand(0,100)."\n";
$values = array( '0'=>21,'1'=>89,'2'=>96,'3'=>47,'4'=>88 );
print_r( array_rand( $values, 3 ) );
?>

在 PHP4.1 时代,(已验证)可以像这样实现恒定的伪随机数。 array_rand API documentation描述为自 4.2 初始化自动发生的功能。也许这会覆盖任何显式播种? (如果是这样,也许显式播种应该引发一个内部 PHP 标志,以防止自动播种?)。顺便说一句:mt_srand() 和 srand() 同样不起作用。

我真的很想找回我的确定性/常数伪随机...

更新:下面的解决方案(Windows 和/或版本 5.2 的错误)

最佳答案

适用于我 (PHP/5.3.6):

<?php

$data = range(1, 100);
srand(1);
print_r(array_rand($data, 3));

...总是打印:

Array
(
[0] => 21
[1] => 89
[2] => 95
)

... 在我的机器上。显然,exact numbers differ取决于确切的环境,但它们是 reproducible .

关于php - 在 PHP 5.2 中重新获得常量伪随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5951788/

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