Wie kann ich eine Zeichenfolge (d. H. E-Mail-Adresse) in eindeutige ganze Zahlen konvertieren, um sie als ID zu verwenden.Wie konvertiert man einen String in einen eindeutigen INTEGER in PHP
Antwort
Die Menge an Informationen, die eine PHP-Ganzzahl speichern kann, ist begrenzt. Die Menge der Informationen, die Sie in einer Zeichenkette speichern können, ist nicht (zumindest wenn die Zeichenkette nicht unangemessen lang ist).
Sie müssten also Ihre Zeichenfolge mit beliebiger Länge zu einer Ganzzahl mit beliebiger Länge komprimieren. Dies ist unmöglich ohne Datenverlust.
Sie können einen Hashing-Algorithmus verwenden, Hashing-Algorithmen können jedoch immer Kollisionen haben. Besonders wenn Sie eine Zeichenkette auf eine ganze Zahl hashen wollen, ist die Kollisionswahrscheinlichkeit ziemlich hoch - ganze Zahlen können nur sehr wenig Daten speichern.
Sie sollten also entweder mit der E-Mail bleiben oder ein automatisch inkrementierendes Integer-Feld verwenden.
können Sie Ihre Antwort besser vor allem den letzten Absatz zu erklären und danke – jspeshu
gute Argumentation ich muss sagen, aber kann ich @ mindestens eine Funktion finden, die dies tun wird, z. Ich habe ein Feld, dh E-Mail, die ein VARCHAR (40) ist, da dieses Feld für alle Werte eindeutig ist, anstatt einen Hash zu verwenden, um Kollusion zu vermeiden, werde ich etwas Wert sagen XXXX, so dass ihre Länge == 40 noch eindeutig ist, dann wie kann ich einen einzigartigen int aus diesem – jspeshu
Well haben. Ich denke immer noch nicht, dass Sie eine solche Funktion finden werden: Eine Zeichenfolge mit 40 Zeichen kann in 40 Bytes gespeichert werden (wenn es ASCII ist, wird Unicode * noch mehr *). Eine ganze Zahl hat dagegen nur 8 Bytes (und das nur auf einer 64-Bit-Maschine). So müssten Sie immer noch 40 Bytes in 8 Bytes speichern ... – NikiC
Versuchen Sie, die binhex Funktion
vom oben genannten Standort:
<?php
$str = "Hello world!";
echo bin2hex($str) . "<br />";
echo pack("H*",bin2hex($str)) . "<br />";
?>
Ausgänge
48656c6c6f20776f726c6421
Hello world!
kann es jetzt eine einzigartige int erzeugen, ist es sehen „48656c6c6f20776f726c6421“ ein hex oder so – jspeshu
abhängt, wie groß der int allerdings ist - das einen int-Wert hat 5216694956355254127 –
Warum auf der Datenbank nicht nur ein Auto-Inkrement-ID-Feld hat?
ich keine db ich habe Ich lese die Daten von LDAP-Server und das einzige eindeutige Feld ist ihre E-Mail-Adresse – jspeshu
+1 das ist der richtige Ansatz. keine String-Magie. – NikiC
Sie brauchen nicht wirklich eine DB für diesen Ansatz, ich denke, Sie könnten eine Textdatei inkrement für jede Kategorie von Dateinamen Inkrementen haben. – Vass
Wenn die E-Mails ascii Text sind, könnten Sie PHP ord function verwenden, um eine eindeutige ganze Zahl zu generieren, aber es wird eine sehr große Zahl sein!
Der Ansatz wäre, die E-Mail-Adresse ein Zeichen nach dem anderen abzuarbeiten, ord für jedes von ihnen anzurufen. Die Funktion ord gibt eine Ganzzahl zurück, die den Wert des Zeichens eindeutig ausdrückt. Sie können jede dieser Zahlen mit Nullen auffüllen und dann die Verkettung der Zeichenketten verwenden, um sie miteinander zu verbinden.
Betrachten Sie "abc".
ord("a");
>> 97
ord("b");
>> 98
ord("c");
>> 99
Pad diese Zahlen mit 0, und Sie haben eine eindeutige Nummer für sie, das heißt: 970980990
.
Ich hoffe, dass hilft!
wie über die Längenbeschränkung z. wie wäre es mit dieser E-Mail "[email protected]" gibt es eine äquivalente Int für diese ich glaube nicht, dass b/se PHP eine Konstante namens PHP_MAX_INT oder so ähnlich hat – jspeshu
Ja, das ist das Problem zu überwinden. Wie alle sagen, ist dies nicht der richtige Weg, um dies zu tun - ich wollte nur einen Ansatz hervorheben, falls das hilft. – adamnfish
Warum erstellen Sie nicht Ihre eigene assoziative Tabelle lokal, die die E-Mails mit eindeutigen Ganzzahlen bindet?
So ist der Arbeitsablauf würde in den Linien sein:
1 get the record from the ldap server.
2 check it locally if it has already an int assigned.
2.1 if yes use that int.
2.2 if no, generate an associative row in the table locally.
3 do your things with the unique ids.
Macht das Sinn?
Entschuldigung, aber nicht bekommen ... – jspeshu
Die einzige Möglichkeit, wie Sie eine Verbindung zwischen Ihren E-Mails und einer Liste von Ganzzahlen erhalten können, ist eine persistente Schicht (eine Datenbank zum Beispiel), die als Mapper zwischen Ihren E-Mails und die Zahlen. So erstellen Sie Ihre Datenbanktabelle oder Datei lokal und speichern Sie die Daten wie folgt: [email protected] = 1001, [email protected] = 1002, etc .. – Slavic
das ist was ich vermeiden will und was mich zu dieser Frage führen? aber danke, ich denke, dieser Kerl @nikic hat es – jspeshu
können Sie diese Funktion verwenden:
function stringToInteger($string) {
$output = '';
for ($i = 0; $i < strlen($string); $i++) {
$output .= (string) ord($string[$i]);
}
return (int) $output;
}
ein bisschen hässlich, funktioniert aber :)
Dieser Code erzeugt 64-Bit-Zahl, die für die Verwendung als sie oder als BigInt/ähnliche Daten-Typ sein Datenbanken wie MySQL usw.
function get64BitNumber($str)
{
return gmp_strval(gmp_init(substr(md5($str), 0, 16), 16), 10);
}
echo get64BitNumber('Hello World!'); // 17079728445181560374
echo get64BitNumber('Hello World#'); // 2208921763183434891
echo get64BitNumber('http://waqaralamgir.tk/'); // 12007604953204508983
echo get64BitNumber('12345678910'); // 4841164765122470932
- 1. Wie konvertiert man String in Integer?
- 2. Wie konvertiert man char * in einen String?
- 3. Wie konvertiert man einen String in NSdate?
- 4. Wie konvertiert man einen HttpServletRequest in String?
- 5. Wie konvertiert man einen String in JavaScript?
- 6. Wie konvertiert man Newtonsoft.Json.Linq.JToken in einen String?
- 7. Wie konvertiert man JSON in einen String?
- 8. Wie konvertiert man einen String in CharSequence?
- 9. wie man uitextfield integer in string konvertiert
- 10. Wie konvertiert man Timestamp in einen String (PHP)?
- 11. In Stylus, wie konvertiert man einen Prozentsatz in Integer?
- 12. Wie konvertiert man einen BufferedReader einfach in einen String?
- 13. Wie konvertiert man einen String in seine Base-10-Darstellung?
- 14. Wie konvertiert man einen String in einen bedingten Ausdruck in PHP?
- 15. Wie konvertiert man Typname T in einen String in C++
- 16. Wie konvertiert man einen String in alle Leerzeichen in Bash?
- 17. Wie konvertiert man String in Integer in Javascript (Rhino) Programmiersprache?
- 18. Wie konvertiert man String in Integer in h: selectOneMenu
- 19. Wie Python String in Integer konvertiert
- 20. Wie konvertiert man Integer in Byte Array in PHP
- 21. Wie konvertiert man NSInteger in einen binären (string) Wert
- 22. Wie konvertiert man JOptionPane String Input in einen Int?
- 23. In Swift, wie konvertiert man einen String zu Int64?
- 24. Wie man einen NSString zu einem String in MonoTouch konvertiert
- 25. Wie konvertiert man einen String in ein BeautifulSoup-Objekt?
- 26. Wie konvertiert man * irgendein * Python-Objekt in einen String?
- 27. Wie konvertiert man ein Array von Ints in einen String?
- 28. Wie konvertiert man einen String mit SimpleDateFormat in ein Date?
- 29. Wie konvertiert man einen JSON String in ein NSArray?
- 30. Freemarker konvertiert einen Hash in String
Abstimmung als nicht wirkliche Frage – Svisstack