我需要一个独特的内部int来代表几种随机内容类型,我不能硬编码为类常量或配置选项。然而,当我可以使用更容易理解的术语“帖子”时,我不想提及“2”。因此,尽管从一个字符串中获取INT值的方法似乎对几个项目相当无冲突。
有没有办法在php而不是我构建的内容中执行此操作?
$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 />';
}
这与用户输入无关,所以不要担心设计中存在明显的缺陷。
:编辑:
我需要一个数字索引来存储在数据库中以便快速查找。即从“文章”或“新闻”中讲述“帖子”。但是我不知道那些1-8类型的内容会被调用,所以我不能在应用程序中将它们硬编码为常量。因此,我能想到的最好的方法是创建每个单词的数字版本(这意味着要检查以确保两个单词不能总结为相同的数字)。
如果这是一个超过8个单词的系统,那么这种方法注定要失败,并且总和碰撞的概率很高。另外,如果我可以选择知道会使用哪些单词,那么这也将是一个糟糕的设计,因为类常量会更好。
答案 0 :(得分:10)
你可以使用crc32,它是一个校验和函数,只返回一个4字节的整数。
答案 1 :(得分:1)
您不能使用单个唯一整数,因为两个不同的整数很有可能相加相同的结果。 3 + 3 = 6; 2 + 2 + 2 = 6;
最好使用不可逆的散列。这更像是一个独特的序列,然后是序列的总和。
ie:md5(),sha1(),sha256()等。
您还可以使用PHP5的spl_object_hash(),它为每个Object分配一个唯一的哈希值。 http://us3.php.net/manual/en/function.spl-object-hash.php
ps:如果你需要整数,你将使用非常大的整数。因此,您可以在示例中连接整数,而不是添加它们。
答案 2 :(得分:1)
<?php
$strings = array('post', 'comment', 'blog', 'article', 'forum', 'news', 'page');
foreach( $strings as $string )
{
echo $string . ' = ' . base_convert(md5($string), 16, 10) . '<br />';
}
?>
答案 3 :(得分:1)
我认为您正在寻找类似于“枚举类型”的模拟,如C,C ++,C#,Pascal,Java等。您没有提到您正在使用的数据库类型,但是{{3 }}
答案 4 :(得分:0)
$strings = array('post' => 0, 'comment' => 1, 'blog' => 2, 'article' => 3, 'forum' => 4, 'news' => 5, 'page' => 6);
$s = 'comment';
$s_as_int = $strings[$s];
答案 5 :(得分:0)
你不能只是array_flip()
或array_search()
你的词典吗?
或者将您的字典存储在数据库中以及另一个名为dictionary
的表中,该表看起来像这样(MySQL)
CREATE TABLE `dictionary` (
`id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
`word` VARCHAR(25),
UNIQUE `word` (`word`)
)