php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 15.12.2010, 12:28  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard Strings numerisch umwandeln

Hallo,

ich weiß nicht, ob das in diesem Bereich gut aufgehoben ist, da es eigentlich um einen Algorithmus geht. Ich habe bisher nichts dazu gefunden, vielleicht habe ich auch nur nach dem falschen gesucht. Das Problem ist folgendes: Ich will Sphinx für eine Volltextsuche nutzen, die Ergebnisse sollen aber alphabetisch sortiert werden. Kurze Info: Sphinx unterstützt zur Sortierung nur sog. Attribute und die dürfen nur ganzzahlig sein. Jetzt versuche ich, einen Algorithmus zu finden, der numerisch die alphabetische Sortierung von Strings abbildet. Allerdings bin ich zu schlecht in Mathe, um prüfen zu können, ob das überhaupt geht.

Ich habe einen Ansatz, der allerdings nur funktioniert, wenn alle Strings die selbe Länge haben:

PHP-Code:
function str2Ordinal($str) {
        
$length mb_strlen($str'utf-8');
        
$sum 0;
        for (
$i 0$i $length; ++$i) {
            
$char  mb_substr($str$i$i 1);
            
$value = ($length $i)*10*ord($char);
            
$sum += $value;
        }

        return 
$sum;
    } 
Diese Funktion geht alle Buchstaben eines Strings durch und multipliziert den Ord-Wert eines jeden Zeichens mit einer absteigenden Zahl * 10. So ist gewährleistet, dass die vorderen Zeichen stärker gewichtet sind, als die hinteren.
Das Problem tritt bei unterschiedlich langen Strings auf. Bsp.:

"b"
hat einen niedrigeren Wert als
"aaaaa",

was zu einer falschen Sortierung führen würde. Problematisch ist, dass ich vorher nicht weiß, wie lang der längste String ist.

Jetzt würde ich gerne wissen, ob mir jemand sagen kann, ob das rechnerisch überhaupt lösbar ist.
xm22 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 15.12.2010, 12:42  
Moderator
 
Registriert seit: 06.06.2008
Beiträge: 4.945
PHP-Kenntnisse:
Fortgeschritten
Wolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer Anblick
Wolla eine Nachricht über ICQ schicken
Standard

Ohne das Ding jemals gesehen zu haben: Wenn man keine Strings damit sortieren kann, dann klopp es in die Tonne.
Wahrscheinlich ist es aber so, dass die Lösung im Manual zu finden ist:
http://sphinxsearch.com/docs/
__________________
Warum denkt mein Hund eigentlich immer dann, wenn es an der Tür klingelt, es sei für ihn?
Wolla ist offline   Mit Zitat antworten
Alt 15.12.2010, 13:04  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Wenn man keine Strings damit sortieren kann, dann klopp es in die Tonne.
Das wäre die allerletzte Konsquenz, die ich aber gerne vermeiden würde, da die Vorteile enorm sind.
In der Doku habe ich natürlich schon nach geschaut. In der Tat steht in der Doku ein Weg, den ich aber nicht verwenden kann. Unabhängig davon würde mich interessieren, wie so ein Algorithmus funktioniert, sofern es eine Lösung dafür gibt.
xm22 ist offline   Mit Zitat antworten
Alt 15.12.2010, 13:33  
Erfahrener Benutzer
 
Registriert seit: 23.09.2010
Beiträge: 146
PHP-Kenntnisse:
Fortgeschritten
jabubo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Deine Funktion hat mindestens einen Fehler. Du verwendest zwar mb_substr um ein einzelnes Zeichen zu haben, aber ord ist nicht Multibyte sicher.

PHP-Code:
echo ord('更'); 
gibt dir 230 zurück. Das ist definitiv ein anderes Zeichen. Du solltest an der Stelle daher das Zeichen mit substr in seine maximal 4 Teile aufspalten und richtig Multiplizieren nicht vergessen.

Generell kann ich mir nicht vorstellen, dass du über diesen einfachen Weg jemals zu einer Lösung kommen wirst. Schreib dir einfach mal die Zahlen von ein paar Worten auf. Damit ist keine sinnvolle Sortierung hinzubekommen. Du wirst immer Konflikte haben.
__________________
PHP online testen, zum Beispiel: md5, base64_decode, preg_match, urldecode und viele weitere...
jabubo ist offline   Mit Zitat antworten
Alt 15.12.2010, 14:07  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
aber ord ist nicht Multibyte sicher.
Das wusste ich nicht - ok.
Zitat:
und richtig Multiplizieren nicht vergessen.
?
Zitat:
Schreib dir einfach mal die Zahlen von ein paar Worten auf.
Bei gleich langen Zeichenketten (alles klein geschrieben) funktioniert es doch..
xm22 ist offline   Mit Zitat antworten
Alt 15.12.2010, 14:16  
Moderator
 
Registriert seit: 06.06.2008
Beiträge: 4.945
PHP-Kenntnisse:
Fortgeschritten
Wolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer Anblick
Wolla eine Nachricht über ICQ schicken
Standard

Zitat:
Bei gleich langen Zeichenketten (alles klein geschrieben) funktioniert es doch..
Dann mach alle Zeichenketten gleich lang.
__________________
Warum denkt mein Hund eigentlich immer dann, wenn es an der Tür klingelt, es sei für ihn?
Wolla ist offline   Mit Zitat antworten
Alt 15.12.2010, 14:37  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Benutz eine sehr lange Ausgangszahl.

Bsp.
a=46
b=47
0=90

aa=4646 * 100000000000 / 10^strlen(4646) = 46460000000
ab=4647 = 46470000000
0=90 * 100000000000 / 10^strlen(90) = 90000000000

Das Problem ist, dass die Zahlen gigantisch werden. Du könntest Dich auf eine bestimmte Länge beschränken oder alle verwendeten Satzzeichen zusätzlich auf eine Map mit kleineren Werten abbilden und dann bspw. in einem anderen Zahlensystem rechnen.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Alt 15.12.2010, 14:47  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

Wieso diese Vorgehensweise? Da blicke ich nicht durch. Außerdem müsste doch die 0 dann eine kleinere Zahl haben als "aa" bzw. "ab"..?
xm22 ist offline   Mit Zitat antworten
Alt 15.12.2010, 20:02  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Naja, kommt drauf an, wo Du sie haben willst. Hab die konkreten Ascii-Nummern jetzt nicht im Kopf, das oben waren Beispiele. Der Grundansatz ist:
Jedes Zeichen bekommt eine 2-stellige Nummer, die werden dann aneinandergereiht und rechtsbündig mit einer festen Anzahl von Nullen aufgefüllt. Ist halt bloß die mathematische Variante.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Teil eines Strings umwandeln 9999 PHP Tipps 2010 29 21.08.2010 15:25
Datumsformate umwandeln GN PHP Tipps 2009 10 10.10.2009 12:58
doc in pdf umwandeln und dann das pdf auslesen... Robinrobin PHP Tipps 2009 6 07.05.2009 14:15
Lange Strings in Oracle-DB schreiben DaKine Datenbanken 2 14.01.2009 13:40
[Erledigt] Anzahl der von Explode gelieferten strings? nofear87 PHP Tipps 2008 3 25.10.2008 11:30
TAB innerhlab eines Strings. GELight PHP Tipps 2006 8 10.07.2006 21:16
EBCDIC in ASCII umwandeln imported_martin PHP Tipps 2006 2 08.04.2006 16:41
[Erledigt] Umwandeln in HTML-Entities ohne Umwandeln der TAGS PHP-Fortgeschrittene 4 26.12.2005 16:17
doppelte Werte / Strings einer Spalte nur einmal ausgeben... Datenbanken 2 29.07.2005 12:10
PDF in html umwandeln JEGO PHP Tipps 2005 2 12.04.2005 15:10
alle Positionen eines Strings innerhalb eines Strings finden PHP Tipps 2005 8 23.02.2005 20:21
strings sortieren aircrash PHP Tipps 2004-2 5 23.12.2004 16:57
metrische länge eines strings Sclot PHP-Fortgeschrittene 3 08.12.2004 13:54
String in Array umwandeln PHP Tipps 2004-2 15 24.11.2004 16:53
[Erledigt] Strings saeubern PHP Tipps 2004 2 12.10.2004 15:52

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
spss string in numerisch umwandeln, spss string in numerisch, http://www.php.de/software-design/75115-strings-numerisch-umwandeln.html, string in numerisch umwandeln spss, spss string zu numerisch, string in numerische umwandeln spss, string sortieren numerisch, spss numerisch string, php numerisch, spss umwandeln von string in numerisch, php string zeichen alphabetisch ordnen, spss string in numeric umwandeln, spss umwandlung von string in numeric, php string sortieren, spss string numerisch umwandeln, php string in numerisch, string in numerisch spss, php string numerisch, spss numerisch in string, php string in numeric umwandeln

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:30 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum