Announcement

Collapse
No announcement yet.

Arrays, Strings und Buchstabenbereiche

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Arrays, Strings und Buchstabenbereiche

    Hallo zusammen,

    mir fehlt als Laie mal wieder die Muse.

    Folgendes Zenario.

    Datenbankabfrage in einen Array. Die Abfrage sortiert nach Namen ASC.

    PHP Code:
    $bereich2 = array('H','I','J','K','L','M');
    ............
    # $vz_daten kommt aus datenbankabfrage;

    foreach($vz_daten as $einzeldaten){
               if(
    $einzeldaten['vzkenn'] == ''){ #alle Namen herausfiltern deren VZ Kennung leer ist.
                    
    foreach($bereich2 as $buchstabe){ # schleife für den Array Buchstaben starten
                       
    $suchname substr($einzeldaten['name'],0,1); # Den ersten Buchsatben des Nachnamen extrahieren
                        
    $eins strstr($suchname,$buchstabe); # Den ersten Buchstaben im Buchstaben Array suchen

    # Die Namen aus dem oben genannten Buchstabenbereich und der erfüllten Bedingung werden in selectbox ausgegeben. 
    Jetzt möchte ich aber die Buchstabenbereiche z.B. nur von ( En - Kl ) ausgeben lassen.
    Wie kann ich denn sowas erreichen.....? Mir fehlt da jetzt der Ansatz

  • #2
    Die ersten beiden Buchstaben des Namens und des jeweiligen Bereiches in ASC umwandeln und addieren. Dann ein < / > Vergleich

    Beispiel Name ist abcdef

    Bereichsgrenze ist ad

    ab=131
    ad=133

    Somt liegt der Name vor ad
    Christian

    Comment


    • #3
      Hallo,

      Also ich würde solche Suchen ja die DB erledigen lassen! Erstens kann die das viel besser und schneller als du es jemals in PHP programmieren könntest und zweitens ist es einfacher und spart eine Menge Arbeit.

      Also das was du da machst ist in etwa so, als würdest du Wikipedia komplett ausdrucken, um dann jedes Blatt Papier durchzugehen und nach den gewünschten Informationen sortieren, statt die Suchfunktion zu verwenden

      Gruß Falk
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        ja, habs mir schon fast gedacht.....

        Dann werd ich mal die Datenbank beauftragen....

        Danke für den Tipp.

        Gruß
        Arno

        Comment


        • #5
          PHP Code:
          SELECT name BETWEEN 'A' AND 'En' as treffer,name FROM `user
          where  name
          BETWEEN 
          'A'
          AND 'En' =1
          ORDER BY name ASC 
          Ich habe jetzt diesen Ansatz gewählt. Is das so OK ? Oder gibt es da noch ne andere Lösung?

          Comment


          • #6
            Wozu definierst du treffer, wenn du es nicht benutzt? Das =1 dürfte wohl ebenfalls falsch sein.
            Between erwartet numerische Werte. Es wäre zu prüfen was die Funktion macht, wenn mehr als 1 Buchstabe übergeben wird.

            Wenn überhaupt dann

            SELECT name FROM `user`where name BETWEEN 'A' AND 'En' ORDER BY name ASC
            Christian

            Comment


            • #7
              PHP Code:
              SELECT  Date_Format(datum,'%d.%m.%Y') as geboren,
                            
              Date_Format(anlagezeit,'%d.%m.%Y') as anlagezeit,
                            
              UNIX_TIMESTAMPcurdate( ) ) - UNIX_TIMESTAMP( `anlagezeit` ) AS zeitdiff
               FROM 
              `user
              where  name BETWEEN '$start' AND '$ende'  AND vzkenn ''
              order by name asc 
              so liefert er mir jetzt das gewünschte Ergebnis.

              Comment


              • #8
                Was ist start/ende?
                Christian

                Comment


                • #9
                  Das ist die Denfinition der Bereiche. Zurzeit benötige ich vier Buchstabenbereiche. Um flexibel zu bleiben kann ich die Var start und ende in einer Config Datei festlegen.
                  Da ich die Abfrage in verschiedenen nutze, habe ich sie in eine Funktion geschrieben.
                  PHP Code:
                  function platz1($start,$ende)
                      {
                      
                  $platz1_daten false;
                      
                  $sql"SELECT Date_Format(datum,'%d.%m.%Y') as geboren,Date_Format(anlagezeit,'%d.%m.%Y') as anlagezeit,UNIX_TIMESTAMP( curdate( ) ) - UNIX_TIMESTAMP( `anlagezeit` ) AS zeitdiff FROM `user` 
                              where  name BETWEEN '
                  $start' AND '$ende'  AND vzkenn = ''
                              order by name asc "
                  ;
                              
                  $this->sql_befehl($sql);
                               while (
                  $daten $this->sql_daten()){
                                          
                  $platz1_daten[] = $daten;
                                      }
                               
                              
                          return 
                  $platz1_daten;
                              
                      } 

                  Comment

                  Working...
                  X