11
Mein Code ist schon noch mein Code, auch wenn ich die Variablen umbenenne und mal eine vergesse. Jetzt kann ich mir schon wieder neue Variablennamen ausdenken, so ein MIst aber auch.
Ich weiß nicht ganz, was du meinst mit innerhalb des Arrays gespeichert. Wenn ich so etwas verwende wie $short[]= oder $long[]= , also den Namen des Arrays mit einem leerem Index, dann sollten ständig neue Werte hinzugefügt werden und der Index dabei automatisch um 1 hochgezählt werden. Genau das gefällt mir an einem Array. Ich brauche nichtmal die Anzahl der Elemente in einem Array zu kennen, um sie trotzdem mit FOREACH alle zu durchlaufen. Bei einer strengeren Programmiersprache wäre ich da völlig überfordert.
Bei neueren Versionen des Firefox steht innerhalb von $_SERVER['HTTP_ACCEPT_LANGUAGE'] gerne ;q=0. irgendeine Ziffer. Da dachte ich schon, ich müßte danach gewichten. Aber Firefox macht das tatsächlich selbst und bringt alle bevorzugte Sprachen in eine Reihenfolge. Man kann beim verstellen dieser Variablen auch die Reihenfolge einstellen. Also etwa mit ungefähr der Bedeutung: liefere mir die deutsche Version, falls die nicht existiert, dann die englische Version, falls die auch nicht existiert, dann die französische Version und so weiter. Sicherlich dürften die Möglichkeiten selten ausgeschöpft werden. Weil es sie nunmal in sehr flexibler Form gibt, muß ein Skript, das Mehrsprachigkeit erlauben will, in gleichermaßen flexibler Form darauf reagieren. Das heißt vor allem die Reihenfolge auswerten, nach den eigentlichen Inhalten. Die wiederum können durch Satzzeichen getrennt sein oder in eckigen Klammern stehen oder was immer anderen Herstellern noch eingefallen sein mag. Darum sucht mein RegEx nach einem Wortanfang und nun ein strpos() nach sinnvollen Indizes.
Mit um eins erhöhen meinte ich strpos()+1 als Index des Ergebnisses verwenden und das funktioniert. Und zwar so wie das nur mit Zahlen funktioniert. Anscheinend wird der Typ eines Array-Schlüssels öfter mal unbemerkt umgewandelt. Inzwischen habe ich nämlich herausgefunden, daß die Sortierung mit ksort() funktioniert. Die Schlüssel des Ergebnisses sind dabei sogar einstellig, also dürfte ksort() nicht nur sortieren, sondern benannte Schlüssel erwarten und die durch numerische ersetzen. Wahrscheinlich machen vor allem implizite Typumwandlungen das Verhalten von PHP schwer vorhersagbar.
Müßte ich ernsthaft mit mehr als zehn Werten in $_SERVER['HTTP_ACCEPT_LANGUAGE'] rechnen, dann müßte ich das Verhalten von ksort() auch noch mit natsort() und vielleicht noch weiteren Sortierfunktionen vergleichen. Wie gut, daß das kein realistischer Fall ist. Also habe ich jetzt mein gewünschtes Ergebnis für diesen Skriptteil. Als nächstes dachte ich daran etwas einfacheres als ein Forum zu versuchen und erstmal ein Wörterbuch zu bauen. Erst erschien mir das noch komplizierter, aber inzwischen nicht mehr. Danach soll es sich dann mit Hilfe seiner eigenen Datenbanktabelle und der Sprachweiche selbst lokalisieren. Übrigens erzähle ich das, weil ich festgestellt habe, daß ich umso intensiver an meinem Skript arbeite, je mehr ich hier darüber erzähle.
Auf die erste Schwierigkeit bin ich beim Wörterbuchbau schon gestoßen. Irgendwie ist aus einem SQL-Statement ein Boolean geworden. Anscheinend darf ich folgendes nicht machen:
Ranma
Ich weiß nicht ganz, was du meinst mit innerhalb des Arrays gespeichert. Wenn ich so etwas verwende wie $short[]= oder $long[]= , also den Namen des Arrays mit einem leerem Index, dann sollten ständig neue Werte hinzugefügt werden und der Index dabei automatisch um 1 hochgezählt werden. Genau das gefällt mir an einem Array. Ich brauche nichtmal die Anzahl der Elemente in einem Array zu kennen, um sie trotzdem mit FOREACH alle zu durchlaufen. Bei einer strengeren Programmiersprache wäre ich da völlig überfordert.
Bei neueren Versionen des Firefox steht innerhalb von $_SERVER['HTTP_ACCEPT_LANGUAGE'] gerne ;q=0. irgendeine Ziffer. Da dachte ich schon, ich müßte danach gewichten. Aber Firefox macht das tatsächlich selbst und bringt alle bevorzugte Sprachen in eine Reihenfolge. Man kann beim verstellen dieser Variablen auch die Reihenfolge einstellen. Also etwa mit ungefähr der Bedeutung: liefere mir die deutsche Version, falls die nicht existiert, dann die englische Version, falls die auch nicht existiert, dann die französische Version und so weiter. Sicherlich dürften die Möglichkeiten selten ausgeschöpft werden. Weil es sie nunmal in sehr flexibler Form gibt, muß ein Skript, das Mehrsprachigkeit erlauben will, in gleichermaßen flexibler Form darauf reagieren. Das heißt vor allem die Reihenfolge auswerten, nach den eigentlichen Inhalten. Die wiederum können durch Satzzeichen getrennt sein oder in eckigen Klammern stehen oder was immer anderen Herstellern noch eingefallen sein mag. Darum sucht mein RegEx nach einem Wortanfang und nun ein strpos() nach sinnvollen Indizes.
Mit um eins erhöhen meinte ich strpos()+1 als Index des Ergebnisses verwenden und das funktioniert. Und zwar so wie das nur mit Zahlen funktioniert. Anscheinend wird der Typ eines Array-Schlüssels öfter mal unbemerkt umgewandelt. Inzwischen habe ich nämlich herausgefunden, daß die Sortierung mit ksort() funktioniert. Die Schlüssel des Ergebnisses sind dabei sogar einstellig, also dürfte ksort() nicht nur sortieren, sondern benannte Schlüssel erwarten und die durch numerische ersetzen. Wahrscheinlich machen vor allem implizite Typumwandlungen das Verhalten von PHP schwer vorhersagbar.
Müßte ich ernsthaft mit mehr als zehn Werten in $_SERVER['HTTP_ACCEPT_LANGUAGE'] rechnen, dann müßte ich das Verhalten von ksort() auch noch mit natsort() und vielleicht noch weiteren Sortierfunktionen vergleichen. Wie gut, daß das kein realistischer Fall ist. Also habe ich jetzt mein gewünschtes Ergebnis für diesen Skriptteil. Als nächstes dachte ich daran etwas einfacheres als ein Forum zu versuchen und erstmal ein Wörterbuch zu bauen. Erst erschien mir das noch komplizierter, aber inzwischen nicht mehr. Danach soll es sich dann mit Hilfe seiner eigenen Datenbanktabelle und der Sprachweiche selbst lokalisieren. Übrigens erzähle ich das, weil ich festgestellt habe, daß ich umso intensiver an meinem Skript arbeite, je mehr ich hier darüber erzähle.
Auf die erste Schwierigkeit bin ich beim Wörterbuchbau schon gestoßen. Irgendwie ist aus einem SQL-Statement ein Boolean geworden. Anscheinend darf ich folgendes nicht machen:
SELECT ( Ziel, Zielsprache FROM Wörterbuch WHERE Quelle = Suchterm ) AND ( Quelle, Quellsprache FROM Wörterbuch WHERE Ziel = Suchterm )
Das ist ein Versuch das Wörterbuch gleich in beiden Richtungen durchsuchbar zu machen, so wie das bei den Wörterbüchern von LEO der Fall ist. Bei den meisten Wörterbüchern, die man online findet, muß man die Suchrichtung umschalten. Nachdem aber LEO schon lange zeigt, daß das nicht notwendig ist, erscheint mir das zu umständlich. Vielleicht ginge es, wenn mein mysqli_stmt_bind_result() mehr als nur zwei Variablen vorsähe? Vermutlich schon und dazu natürlich die gesamte Weiterverarbeitung doppelt schreiben, nur mit jeweils den unterschiedlichen Variablennamen. Ich war mir unsicher, weil dann die Variablen meistens leer bleiben dürften. Also probiere ich wohl einfach aus, was mit leeren Variablen passieren wird...Ranma