Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.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
在php中将字符串转换为唯一的数值_Php - Fatal编程技术网

在php中将字符串转换为唯一的数值

在php中将字符串转换为唯一的数值,php,Php,我需要一个唯一的内部int来表示几个随机的内容类型,我不能硬编码为类常量或配置选项。然而,当我可以使用更容易理解的术语“post”时,我不想提及“2”。因此,尽管如此,我们还是找到了一种从字符串中获取INT值的方法,对于一些项目来说,这种方法似乎是无冲突的 有没有一种方法可以在php中实现这一点,而不是我构建的 $strings = array('post', 'comment', 'blog', 'article', 'forum', 'news', 'page'); foreach( $s

我需要一个唯一的内部int来表示几个随机的内容类型,我不能硬编码为类常量或配置选项。然而,当我可以使用更容易理解的术语“post”时,我不想提及“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 />';
}
$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`)
)