Groß- und Kleinschreibung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Groß- und Kleinschreibung

    Ich hab folgendes Problem: ich möchte wissen, ob ein Dateiname schon existiert, allerdings unabhängig von der Groß- und Kleinschreibung.

    Wie kann ich dies bei diesem Beispiel erreich ?

    PHP-Code:
    if (file_exists($user)) 
    {
    echo 
    '<br><center><b>Der Benutzername ist vergeben, bitte wähle einen anderen !</b></center>';
    include (
    'site.register.php');
    }
    else 

  • #2
    so wahrscheinlich nicht.....

    lies dir die dateien aus dem verzeichnis aus. mache alle buchstaben entweder groß oder klein. muss du selber wissen.

    dann kannst du das array der dateien prüfen ob $user (in groß oder klein | siehe oben ) enthalten ist.

    wie es genau geschrieben ist, weisst du dann aber auch nicht. dadurch wird dein include möglicherweise scheitern.

    datei.php
    Datei.php
    dAtei.php
    dAtei.PHp

    wird immer zu

    datei.php bzw. DATEI.PHP

    welche buchstaben waren nun groß? kann man nicht wissen.

    wenn du hingegen sowieso alle dateinamen klein machst, sollte diese idee dich schon weiterbringen.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      ok in die Richtung ging meine überlegung auch...

      mal eine andere Frage...

      mit welchen Befehl mache ich alles groß oder klein ?

      Kommentar


      • #4
        weil, wenn ich das weiß dürfte ich eine Lösung haben

        Kommentar


        • #5
          strtolower() macht alles klein und strtoupper() macht alles gross.

          gruss

          Kommentar


          • #6
            $string=strtolower($string);
            glaube ich..
            meine Projekte bestaunen: http://www.kleiza.de

            Kommentar


            • #7
              strtoupper()
              http://de.php.net/manual/de/function.strtoupper.php

              strtolower()
              http://de.php.net/manual/de/function.strtolower.php
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                drei zur gleichen zeit ..... LOL

                alle drei zusammen ...
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #9
                  was für ein service
                  meine Projekte bestaunen: http://www.kleiza.de

                  Kommentar


                  • #10
                    sach ich jetzt nichts zu!

                    jetzt wissen wir aber, dass es stimmt

                    gruss

                    Kommentar


                    • #11
                      auf jeden Fall sage ich gerade deshalb vielen Dank...

                      werde es gleich mal ausprobieren *g*

                      Kommentar


                      • #12
                        Hallo zusammen,

                        ich möchte keinen neuen thread extra aufmachen, weil mein Problem im Prinzip das selbe ist.


                        Ich frage mich, ob es wirklich noch keine Array Funktion gibt, wo man ein Array nach einem Wert durchsuchen kann und das ganze NICHT case-sensitive?

                        Also sowas wie in_array() oder array_search() mit einem optionalen boolean Parameter, wo man angeben kann, ob der Modus case-sensitive oder eben nicht sein soll.

                        Muss man das tatsächlich mit einer vorherigen Umwandlung realisieren oder wie macht man sowas am besten, schnellsten, effizientesten?
                        Rettet die Wälder - esst mehr Biber

                        Kommentar


                        • #13
                          Original geschrieben von deetee
                          Ich frage mich, ob es wirklich noch keine Array Funktion gibt, wo man ein Array nach einem Wert durchsuchen kann und das ganze NICHT case-sensitive?
                          nein, wozu?

                          Also sowas wie in_array() oder array_search() mit einem optionalen boolean Parameter, wo man angeben kann, ob der Modus case-sensitive oder eben nicht sein soll.
                          arrays sind nicht nur für strings da. gib doch mal strtolower ein objekt als parameter, zum beispiel. ein zusätzlicher parameter würde eher verwirren als gutes tun. eine bessere idee wäre es, eine callback-funktion angeben zu können, die die bedingung "equals" überprüft, d.h. jedesmal aufgerufen wird, wenn suchterm und array-element auf gleichheit überprüft werden müssen.

                          Muss man das tatsächlich mit einer vorherigen Umwandlung realisieren oder wie macht man sowas am besten, schnellsten, effizientesten?
                          annahmen:
                          php benutzt die lineare suche in der implementierung von array_search (etwas anderes macht auch keinen sinn, schließlich kann die funktion keine annahmen über den sortierzustand des arrays machen).
                          du kannst davon ausgehen, dass array_search im durschnitt (n+1)/2 vergleiche braucht, um das richtige element zu finden, und natürlich sind O(n) schritte für array_map notwendig.
                          weiter müssen wir beachten, wie aufwändig die funktion ist, die array_map übergeben wird. strtolower kann auch ganz schön langsam werden, wenn der funktion megabyteweise strings übergeben werden. d.h. es kommt nicht nur auf n (anzahl der elemente im array) an.
                          vereinfachend können wir aber K als durchschnittlichen wert nehmen, den die callback-funktion benötigt. also haben wir O(n*k) für array_map.

                          Code:
                          $arr = array_map('strtolower', $arr);
                          $theKey = array_search($term, $arr);
                          das bedeutet, wir haben einen aufwand von O(n*k + (n+1)/2 ) für diese einfache implementierung.

                          dieses beispiel:
                          Code:
                          foreach($arr as $k => $v) {
                             if ($term == strtolower($v)) {
                                return $k;
                             }
                          }
                          benötigt nur noch einen aufwand von O(((n + n*k) +1)/2) = O((n (k+1))/2), weil die elemente nach dem ersten suchtreffer nicht mehr mit strtolower behandelt werden müssen.

                          welche methode schneller ist:
                          Code:
                          // foreach-methode      >   array_map + array_search ?
                          (n * (k+1) )/ 2 > (n * k) + (n+1)/2
                          (n*(k+1)) / 2 > (n(2k+1))/2 
                          1 > k
                          ... d.h. theoretisch ist die foreach-methode schneller, sofern k >= 1 gilt. da sich "n" rauskürzen lässt, sehen wir: es kommt also gar nicht auf die anzahl der elemente im array an, sondern auf den aufwand der callback-funktion.

                          jetzt kommt aber noch ein praxis-aspekt hinzu: um wie viel schneller ist das interpretierte "foreach" als die kompilierte while-schleife in array_search() ? denn dieser faktor würde sich nicht rauskürzen lassen, und unsere vergleichsfunktion würde so aussehen:

                          Code:
                          // foreach vs search
                          (n* (k+1)) / 2 + n*c_foreach > (n(2k+1))/2 + n*c_search
                           ... tipperei vermeiden ...
                          2 *(c_foreach - c_search) > k
                          d.h. die doppelte laufzeitdifferenz zwischen 'foreach' und 'search' muss größer sein als k, damit die erste methode schneller ist als die zweite.

                          jetzt muss man nur noch c_foreach, c_search experimentell oder durch einen beweis ermitteln, n und k aus dem eigenen problemfall einsetzen und gucken, welche methode die schnellere ist.

                          grüße
                          axo

                          EDIT:

                          gröbere fehler in der berechnung ausgemerzt.

                          Zuletzt geändert von axo; 29.07.2006, 11:18.

                          Kommentar


                          • #14
                            ...

                            PHP-Code:
                            foreach ($array as $value) {
                              if (
                            strcasecmp($value$wert) === 0) {
                                return 
                            true;
                              }
                            }
                            return 
                            false
                            Es ist vollkommen unnötig sich Gedanken darüber zu machen was schneller ist. Ich hab mir ein Verzeichnis mit fast 5000 Dateien drin geschnappt und beide Möglichkeiten drüber gescheucht, beide lagen im Millisekunden-Bereich und meine dritte Version war übrigens die schnellste ^^
                            btw. nicht, dass mir nachgesagt wird ich hätte geschummelt, $term bzw. $wert, war das letzte Value, die Schleifen sind also beide ganz durchgegangen

                            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                            Wie man Fragen richtig stellt

                            Kommentar


                            • #15
                              Original geschrieben von ghostgambler
                              Es ist vollkommen unnötig sich Gedanken darüber zu machen was schneller ist.
                              was mal wieder zeigt, dass man manchmal nur von trotteln und ignoranten umgeben ist. hast du überhaupt gelesen, was ich geschrieben hab?

                              Ich hab mir ein Verzeichnis mit fast 5000 Dateien drin geschnappt und beide Möglichkeiten drüber gescheucht, beide lagen im Millisekunden-Bereich und meine dritte Version war übrigens die schnellste ^^
                              danke, dass du uns gezeigt hast, dass strcasecmp($a, $b) === 0 schneller ist als strtolower($a) == $b . welch wunder. zumindest hast du erkannt, dass man k und damit die laufzeit der vergleichsfunktion minimieren muss.

                              btw. nicht, dass mir nachgesagt wird ich hätte geschummelt, $term bzw. $wert, war das letzte Value, die Schleifen sind also beide ganz durchgegangen
                              ich habe ebenfalls gezeigt, dass die position des gefundenen elements für den vergleich egal ist.

                              Kommentar

                              Lädt...
                              X