url中的PHP唯一标识字段
我左右为难。我需要数据库表中的唯一字符串在url中显示它(我不在url中显示id) 我想在php中生成唯一的字符串检查它是否在表中唯一,如果不生成新的url中的PHP唯一标识字段,php,Php,我左右为难。我需要数据库表中的唯一字符串在url中显示它(我不在url中显示id) 我想在php中生成唯一的字符串检查它是否在表中唯一,如果不生成新的 对于长度为8个字符、行数较大(约100000行)的字符串,您认为其性能如何。您可以使用创建一个唯一的php id 生成新ID时,检查DB是否存在。如果有,创建一个新的假设您在数据库中的该列上设置了一个索引,这些检查将不会非常昂贵 在伪(-ish)代码中: 您也可以创建一个函数,将id散列或编码为字符串,而不是生成id之外的唯一键。例如,可以将整数
对于长度为8个字符、行数较大(约100000行)的字符串,您认为其性能如何。您可以使用创建一个唯一的php id 生成新ID时,检查DB是否存在。如果有,创建一个新的假设您在数据库中的该列上设置了一个索引,这些检查将不会非常昂贵 在伪(-ish)代码中:
您也可以创建一个函数,将id散列或编码为字符串,而不是生成id之外的唯一键。例如,可以将整数转换为8个字符的十六进制表示。如果愿意的话,您可以将其变得更复杂一些,但是,编写一个使用固定公式将数字转换为8个字母的函数还是相当容易的,反之亦然。这样,您就不需要存储这些额外的数据,也不必担心值的唯一性
<?php
function translate($key, $back)
{
$key = str_pad($key, 8, '0', STR_PAD_LEFT);
$a = array('1','2','3','4','5','6','7','8','9','0');
$b = array('a','b','c','d','e','f','g','h','i','j');
if ($back) {$c = $b; $b = $a; $a = $c;}
return str_replace($a, $b, $key);
}
function encode_id($int)
{
return translate($int, false);
}
function decode_id($key)
{
return (int)translate($key, true);
}
$key = encode_id(40000);
$int = decode_id($key);
echo $key;
echo '<br>';
echo $int;
好主意,但对我来说并不是那么简单。如果我可以问的话,为什么不呢?我不想给出你的想法:)谢谢你的代码,但我主要考虑性能,你回答我。
<?php
function translate($key, $back)
{
$key = str_pad($key, 8, '0', STR_PAD_LEFT);
$a = array('1','2','3','4','5','6','7','8','9','0');
$b = array('a','b','c','d','e','f','g','h','i','j');
if ($back) {$c = $b; $b = $a; $a = $c;}
return str_replace($a, $b, $key);
}
function encode_id($int)
{
return translate($int, false);
}
function decode_id($key)
{
return (int)translate($key, true);
}
$key = encode_id(40000);
$int = decode_id($key);
echo $key;
echo '<br>';
echo $int;