我有一个网站( site-1 )从其他网站( site-2 )导入网页。
这些页面在site-2中有一个 id 编号,导入完成后,该编号将复制到site-1。到目前为止一切都很好。
问题是site-2的 id 很大,例如:32423201639,3212450421639,...并且site-1中的sistem无法处理它们。所以我需要在导入完成后使这些数字更小。
重要的是:
生成唯一的数字值。
大于3000且小于10000。
它不能使用rand()。如果我们执行这几次,结果必须相同
更新 请记住:
这个导入是每周完成的,所以我需要考虑这个:让我们说第一次导入完成,然后在第二次导入时,只有第一个数组值发生变化,但其他数据值仍然存在,那么这个数据将是唯一一个被更改,另一个将保持与第一次导入相同的值。
我认为第一件事就是这样(但最重要的是缺少):
$array_values_site1 = array("12345" , "123456", "1234567", "12345678", "123456789", "1234567890", "12345678901", "123456789012", "1234567890123", "12345678901234", "123456789012345", "1234567890123456");
$array_values_site2 = array();
foreach ($array_values_site1 as &$value) {
/* here I need to change the value of $value:
--- to be bigger than 3000 and smaller than 10000.
--- It can not use rand(). If we execute this several time the results must be the same
--- to be unique */
$new_value = "....";
$array_values_site2 [] = $new_value;
}
答案 0 :(得分:1)
查看评论,哈希原始ID最佳:
$hashids = new Hashids\Hashids('this is my salt');
$id = $hashids->encode(1);
$original = $hashids->decode($id);
要指定结果中使用的最小长度(不是数字,但是长度)和字符,请包含第二个和第三个参数:
$hashids = new Hashids\Hashids('this is my salt');
$id = $hashids->encode(1, 8, 'abcdefghij1234567890');
$original = $hashids->decode($id);
// $id = '514cdi42';
有关信息,请参阅hashids.org和github。