在php中将字符串转换为唯一的数值
我需要一个唯一的内部int来表示几个随机的内容类型,我不能硬编码为类常量或配置选项。然而,当我可以使用更容易理解的术语“post”时,我不想提及“2”。因此,尽管如此,我们还是找到了一种从字符串中获取INT值的方法,对于一些项目来说,这种方法似乎是无冲突的 有没有一种方法可以在php中实现这一点,而不是我构建的在php中将字符串转换为唯一的数值,php,Php,我需要一个唯一的内部int来表示几个随机的内容类型,我不能硬编码为类常量或配置选项。然而,当我可以使用更容易理解的术语“post”时,我不想提及“2”。因此,尽管如此,我们还是找到了一种从字符串中获取INT值的方法,对于一些项目来说,这种方法似乎是无冲突的 有没有一种方法可以在php中实现这一点,而不是我构建的 $strings = array('post', 'comment', 'blog', 'article', 'forum', 'news', 'page'); foreach( $s
$strings = array('post', 'comment', 'blog', 'article', 'forum', 'news', 'page');
foreach( $strings as $string ) {
print $string . ' = ';
$string = str_split($string);
$sum = 0;
foreach( $string as $char ) {
$sum += ord($char);
}
var_dump( $sum );
print '<br />';
}
$strings=array('post','comment','blog','article','forum','news','page');
foreach($strings作为$string){
打印$string。“=”;
$string=str_split($string);
$sum=0;
foreach($string作为$char){
$sum+=ord($char);
}
var_dump(金额);
打印“
”;
}
这与用户输入无关,所以不要担心设计中的明显缺陷
:编辑:
我需要一个数字索引存储在数据库中,以便快速查找。i、 e.从“文章”或“新闻”中辨别“帖子”。但我不知道这1-8种类型的内容将被调用,所以我不能在应用程序中将它们硬编码为常量。因此,我能想到的最好办法是为每个单词创建一个数字版本(这意味着检查以确保两个单词的总和不等于同一个数字)
如果这是一个系统,将有超过8个字,那么这种方法是注定要失败的高概率总和碰撞。另外,如果我可以选择使用什么词,那么这也是一个糟糕的设计,因为类常量的效果会更好。你不能使用一个唯一的整数,因为两个不同的整数加起来有很高的机会得到相同的结果。3+3 = 6; 2+2+2 = 6;
$strings = array('post' => 0, 'comment' => 1, 'blog' => 2, 'article' => 3, 'forum' => 4, 'news' => 5, 'page' => 6);
$s = 'comment';
$s_as_int = $strings[$s];
最好使用不可反转的散列。这是一个唯一的序列,然后是序列的和
ie:md5()、sha1()、sha256()等
还可以使用PHP5的spl_object_hash()为每个对象分配唯一的哈希。
ps:如果你需要整数,你会使用非常大的整数。因此,您可以在示例中连接整数,而不是添加它们
<?php
$strings = array('post', 'comment', 'blog', 'article', 'forum', 'news', 'page');
foreach( $strings as $string )
{
echo $string . ' = ' . base_convert(md5($string), 16, 10) . '<br />';
}
?>
< p>我认为你要把一个模拟实现成一个“枚举类型”,比如C、C++、C、Pascal、java等等。你不用提到你使用的是哪种类型的数据库,但是.< /P> < P>你可以使用,它是一个简单的返回4字节整数的校验和函数。< /P> < P>你不能只或者你的字典?< /P>
或者将字典存储在数据库中,也可以存储在另一个名为dictionary
的表中,该表类似于以下内容(MySQL)
例如,为什么不使用md5哈希呢?(如果你不需要数字)“但是我不想提到“2”,因为我可以使用更容易理解的术语“post”是的,你可以随意使用“post”,然后当你需要整数$strings['post']时,基本上,我在这里建议的是,你可以使用字典将字符串映射到int。您也可以只使用常规数组,而不是使用$strings['post']转换为int,而是使用array_search('post',$strings)。当您添加需要整数的新词时,您可以将它们推到$string的末尾。由于您还没有说明要做什么,因此,我只能模糊地猜测哪些词可能会很好地工作。如果您希望某个函数能够接受任何字符串,并为其提供唯一标识符,那么您应该寻找一个哈希函数。md5或sha1等强散列函数(即不会出现冲突的函数)可以很好地实现这一点,但标识符将大于int(16-40字节),这太棒了,没有比这更简单的了。+1谢谢,我特别想要一个4字节的整数;任何其他小的结果都可以达到8字节,但这是完美的。不是真的,我没有一个单词数组,我甚至不知道它们将是什么。我之后的开发人员将创建其中一些。
CREATE TABLE `dictionary` (
`id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
`word` VARCHAR(25),
UNIQUE `word` (`word`)
)