基于种子洗牌数组以获得始终相同的结果?
我需要根据种子号对数组进行洗牌,以便在需要时可以获得相同的洗牌效果。
例如:
1. print_r( shuffleIt( $array, 2 ) );
2. print_r( shuffleIt( $array, 6 ) );
3. print_r( shuffleIt( $array, 2 ) );
- 和 3. 将显示相同的打乱数组,但与 2 不同。
我在谷歌搜索中发现了这个函数:
function entropy( $array, $sort_seed ) {
mt_srand( $sort_seed );
$order = array_map( create_function( '$val', 'return mt_rand( );' ), range( 1, count( $array ) ) );
array_multisort( $order, $array );
return $array;
}
它在我的电脑上使用 php-cli 工作得很好,我总是为我使用的每个不同的 sort_seed 得到相同的数组,但是当我将其上传到服务器后,即使我使用相同的 sort_seed,我每次都会得到不同的数组。
当使用相同的 sort_seed 时,如何才能始终获得相同的打乱数组?
顺便说一句。我需要保留键或对多维数组进行排序,以便可以将键存储在那里。
I need to shuffle an array based on a seed number so I can get the same shuffle if I need it.
For example:
1. print_r( shuffleIt( $array, 2 ) );
2. print_r( shuffleIt( $array, 6 ) );
3. print_r( shuffleIt( $array, 2 ) );
- and 3. would show the same shuffled array but different than 2.
I found this function googling:
function entropy( $array, $sort_seed ) {
mt_srand( $sort_seed );
$order = array_map( create_function( '$val', 'return mt_rand( );' ), range( 1, count( $array ) ) );
array_multisort( $order, $array );
return $array;
}
It works fine on my pc with php-cli, I always get the same array for each different sort_seed I use, but when I uploaded it to a server, I get different arrays every time even when I am using the same sort_seed.
How could I get always the same shuffled array when using the same sort_seed?
btw. I need to preserve keys or sort a multidimensional array so I can store the key there.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您需要在任何电脑上使用它,则需要一个在计算机上运行相同的随机数生成器。我从随机数生成维基百科页面 并将其放入一个类中,以便您可以播种它。
我不知道你需要什么,但这可能适合你的需要。它独立于系统配置:
注意:这在 32/64 位系统之间可能表现不同,特别是 PHP 在 Windows 和 Unix 之间的整数和溢出方面有所不同。您可能需要 PHP 中 32 位整数的带符号最小值的偏移量,而不是现在的 0,以将实现切换到 gmp 或者只是将大小减小一位。
荷兰 ekke 报告 32 位使用示例可以正常工作
If you need it on any pc, you need a random number generator that works the same across computers. I looked up one pseudo-random-number generator that might be suitable for you from the Random Number Generation Wikipedia page and put it into a class so you can seed it.
I don't know for what you need it, but this just might suit your needs. It's independent to system configuration:
Note: This might behave differently between 32/64 bit systems, especially as PHP differs here for integers and overflows between windows and unix. You might want offset at the signed minimum for 32 bit integers in PHP instead of 0 as it is now, to switch the implementation to gmp or just reduce the size by one bit.
Usage Example 32 bit reported to work by ekke from netherlands
您是否偶然托管了 Suhosin 安全扩展?显然,它有几个指令可以阻止脚本设置种子:
进一步阅读:
这是测试这是否是问题的快速方法:
Does you host run by chance the Suhosin security extension? Apparently, it has a couple of directives that prevent scripts from setting a seed:
Further reading:
Here's a quick way to test whether this is the problem: