Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
url中的PHP唯一标识字段_Php - Fatal编程技术网

url中的PHP唯一标识字段

url中的PHP唯一标识字段,php,Php,我左右为难。我需要数据库表中的唯一字符串在url中显示它(我不在url中显示id) 我想在php中生成唯一的字符串检查它是否在表中唯一,如果不生成新的 对于长度为8个字符、行数较大(约100000行)的字符串,您认为其性能如何。您可以使用创建一个唯一的php id 生成新ID时,检查DB是否存在。如果有,创建一个新的假设您在数据库中的该列上设置了一个索引,这些检查将不会非常昂贵 在伪(-ish)代码中: 您也可以创建一个函数,将id散列或编码为字符串,而不是生成id之外的唯一键。例如,可以将整数

我左右为难。我需要数据库表中的唯一字符串在url中显示它(我不在url中显示id)

我想在php中生成唯一的字符串检查它是否在表中唯一,如果不生成新的


对于长度为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;