Php benzersiz bir sayısal değere dize dönüştürmek

4 Cevap

Ben birkaç rastgele içerik türlerini temsil edecek kullanmak için benzersiz bir iç int gerekli sınıf sabitleri veya yapılandırma seçenekleri olarak ben yapamadım zor kodu. Ben dönem "yazı" takip etmek daha kolay kullanabilirsiniz zaman henüz "2" ye başvurmak istemedim. Yani olsa bir çift öğeler için ücretsiz oldukça çarpışmayı çalışmak gibi görünüyor bir dizeden bir INT değeri almak için bir yol yukarı.

Doğrusu ben ne inşa daha php bunu yapmanın bir yolu var mı?

$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 />';
}

Bu kullanıcı girişi ile ilgisi vardır bu yüzden tasarım bariz kusurları hakkında endişelenmeyin.

: EDIT:

Ben hızlı bakmak ups için bir veri tabanında depolanması için sayısal bir dizin gerekir. yani, "makale" ya da "haber" den "mesajları" anlatmak için. Yine de içerik o 1-8 türleri yüzden app sabitler olarak bu sabit kod olamaz denilen ne olacağını bilmiyorum. Bu nedenle, ben anlamaya olabilecek en iyi şey, her kelimenin bir sayısal sürümü (emin iki kelime aynı sayıda Özetle vermemesi için kontrol anlamına gelir) oluşturmak olacaktır.

Bu fazla 8 kelime olurdu bir sistem olsaydı o zaman bu yöntem toplamı çarpışmalar yüksek olasılık yapmak başarısızlığa mahkumdur. Ben kullanılmalıdır hangi kelimeleri bilerek bir seçim olsaydı sınıf sabitleri çok daha iyi çalışacak gibi Ayrıca, bu da korkunç bir tasarım olacaktır.

4 Cevap

Sadece bir 4 bayt tamsayı döndüren bir checksumming fonksiyonu olan crc32 kullanabilirsiniz.

İki farklı tamsayılar aynı sonucu kadar ekleyerek çok yüksek bir şans çünkü sen, tek, benzersiz bir tamsayı kullanamazsınız. 3 +3 = 6; 2 +2 +2 = 6;

Sen olmayan bir tersinir hash kullanarak daha iyi. Bu dizisinin toplamı daha sonra, özel bir dizinin daha fazladır.

yani: md5 (), sha1 (), sha256 (vb)

You can also use PHP5's spl_object_hash() which assigns a unique hash to every Object. http://us3.php.net/manual/en/function.spl-object-hash.php

ps: Eğer tamsayılar gerekirse, gerçekten büyük tamsayıları kullanarak olurdu. Böylece sadece yerine, onları ekleyerek, sizin örnekte tamsayıları arada kullanabilirsiniz.

Ben C gibi bir "sabit tür" bir analog ulaşmak isteyen düşünüyorum, vs C + +, C #, Pascal, Java, Eğer kullandığınız veritabanının ne tür söz, ama yok {[(0)] } ENUM yazın kullanarak gerçekleştirmek için bu kolaylaştırır.