come posso convertire una stringa (ad esempio indirizzo e-mail) in numeri interi univoci, per usarli come ID.Come convertire una stringa in INTEGER univoco in php
risposta
La quantità di informazioni che un intero PHP può memorizzare è limitata. La quantità di informazioni che è possibile memorizzare in una stringa non è (almeno se la stringa non è irragionevolmente lunga.)
Pertanto, è necessario comprimere la stringa di lunghezza arbitraria su un numero intero non arbitrario. Questo è impossibile senza perdita di dati.
È possibile utilizzare un algoritmo di hashing, ma gli algoritmi di hashing possono sempre avere collisioni. Soprattutto se si desidera eseguire l'hash di una stringa su un numero intero, la probabilità di collisione è piuttosto elevata: gli interi possono archiviare solo pochissimi dati.
Pertanto è necessario attenersi all'e-mail o utilizzare un campo intero incrementale automatico.
puoi spiegare meglio la tua risposta in particolare l'ultimo paragrafo e grazie – jspeshu
buon ragionamento devo dire, ma posso almeno trovare una funzione che lo farà ad es. ho un campo cioè email che è un VARCHAR (40) quindi dato che questi campi sono unici per tutti i valori piuttosto che usare un hash per evitare la collusione, aggiungerò qualche valore diciamo XXXX in modo che la loro lunghezza == 40 sia ancora unica, allora come posso avere un int esclusivo da questo – jspeshu
Bene. Continuo a non pensare che troverai una funzione simile: una stringa di 40 caratteri può essere memorizzata in 40 byte (se è ascii, unicode impiegherà * ancora di più *). Un intero invece ha solo 8 byte (e solo su una macchina a 64 bit). Quindi avresti ancora bisogno di memorizzare 40 byte in 8 byte ... – NikiC
Prova la funzione binhex
dal sito di cui sopra:
<?php
$str = "Hello world!";
echo bin2hex($str) . "<br />";
echo pack("H*",bin2hex($str)) . "<br />";
?>
uscite
48656c6c6f20776f726c6421
Hello world!
può che generare un int unica ora è vederlo "48656c6c6f20776f726c6421" un esagono o giù di lì – jspeshu
dipende quanto grande sia l'int è però - che ha un valore int 5216694956355254127 –
Perché non basta avere un campo ID di incremento automatico sul database?
non ho i db sto leggendo i dati dal server LDAP e l'unico campo unico è il loro indirizzo email – jspeshu
+1 che è l'approccio corretto. nessuna magia di corde. – NikiC
Non hai davvero bisogno di un DB per questo approccio, suppongo che potresti avere un incremento di file di testo per ogni categoria di incrementi di nome file. – Vass
Se le e-mail sono testo ascii, è possibile utilizzare PHP ord function per generare un numero intero univoco, ma sarà un numero molto grande!
L'approccio sarebbe quello di lavorare attraverso l'indirizzo di posta elettronica di un carattere alla volta, chiamando ord per ciascuno di essi. La funzione ord restituisce un intero che esprime in modo univoco il valore del carattere. È possibile riempire ciascuno di questi numeri con zeri e quindi utilizzare la concatenazione di stringhe per collegarli l'uno all'altro.
Considerare "abc".
ord("a");
>> 97
ord("b");
>> 98
ord("c");
>> 99
Pad questi numeri con 0, e si dispone di un numero unico per esso, cioè: 970980990
.
Mi auguro che aiuta!
come circa la limitazione della lunghezza, ad es. che ne dici di questa email "[email protected]" c'è un int equivalente per questo io non penso che b/se php abbia qualche costante chiamato PHP_MAX_INT o qualcosa del genere – jspeshu
Sì, questo sarà il problema da superare. Come tutti dicono, questo non è il modo giusto per farlo: volevo solo evidenziare un approccio nel caso in cui ciò fosse d'aiuto. – adamnfish
perché non creare la propria tabella associativa a livello locale che legherà le email con numeri interi unici?
Così il flusso di lavoro sarebbe nelle linee di:
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.
Ha senso?
scusate ma non ha ottenuto che ... – jspeshu
L'unico modo per mantenere un'associazione tra le vostre e-mail e un elenco di numeri interi è avere un livello persistente (un database per esempio) che funzionerà come un mappatore tra le vostre e-mail e i numeri. Quindi crea la tua tabella di database o file localmente e memorizza i dati in questo modo: [email protected] = 1001, [email protected] = 1002, ecc. – Slavic
che è quello che voglio evitare e che cosa mi ha portato a questa domanda? ma grazie penso che questo ragazzo @nikic lo abbia capito – jspeshu
È possibile utilizzare questa funzione:
function stringToInteger($string) {
$output = '';
for ($i = 0; $i < strlen($string); $i++) {
$output .= (string) ord($string[$i]);
}
return (int) $output;
}
un po 'brutto, ma funziona :)
Questo codice genera il numero a 64 bit che può essere utilizzato in quanto o come BIGINT/simile tipo di dati per database come MySQL ecc.
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. come convertire oggetto in stringa in PHP
- 2. Integer convertire in WoW Gold
- 3. PHP: Come convertire 0777 (un ottale) in una stringa?
- 4. Convertire un intero grande in una stringa intera in PHP
- 5. Come convertire una stringa Lua in float
- 6. PHP - Convertire un array multidimensionale in stringa?
- 7. Come convertire una stringa di 18 caratteri in un ID univoco?
- 8. Convertire una stringa JSON oggetto PHP
- 9. Convertire Char in una stringa
- 10. Come convertire la stringa in un'espressione condizionale in PHP?
- 11. Convertire un intero grande in una stringa esadecimale in Javascript
- 12. come convertire una stringa c in una stringa d?
- 13. Convertire una stringa separata da virgola in PHP int?
- 14. Ruby: Come convertire una stringa in booleana
- 15. Come convertire Bitmap in una stringa Base64?
- 16. come convertire una stringa in un bool
- 17. Come convertire StreamReader in una stringa?
- 18. Come convertire un HTMLElement in una stringa
- 19. Come convertire WebResponse.GetResponseStream in una stringa?
- 20. Come convertire una stringa in un decimale?
- 21. perl come convertire una stringa in Datetime?
- 22. Come convertire i valori in una stringa?
- 23. Come convertire un int in una stringa?
- 24. Come convertire una stringa in CharSequence?
- 25. Come convertire una stringa in UTF8?
- 26. Come posso convertire una stringa in jsx?
- 27. Come convertire String in Integer in h: selectOneMenu
- 28. PHP String Contiene Integer
- 29. Come convertire una stringa in una funzione in Clojure?
- 30. Come convertire una stringa in una costante in Ruby?
voto di non vera domanda – Svisstack