bituniverse.com Foren-Übersicht bituniverse.com
Entwickler Forum
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

String nach best. Zeichen sortieren / best. Zeichen zählen

 
Neues Thema eröffnen   Neue Antwort erstellen    bituniverse.com Foren-Übersicht -> Code-Schnipsel
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Beepa



Anmeldedatum: 05.11.2007
Beiträge: 53
Wohnort: Düsseldorf

BeitragVerfasst am: Do 15 Nov, 2007 00:48    Titel: String nach best. Zeichen sortieren / best. Zeichen zählen Antworten mit Zitat

Hier sind zwei Funktionen die ich mal geschrieben habe, um einen String
nach bestimmten Zeichen zu sortieren bzw. bestimmte Zeichen zu zählen.
Ich weiß nicht ob ich die performanteste Lösung dafür gefunden habe, aber
sie haben seinerzeit ihren Dienst erfüllt Smile

Php:
  1. <?php
  2.  
  3. /**
  4.  * Funktion die einen String anhand eines RegExPattern filtert
  5.  * und aufsteigend/absteigend sortiert
  6.  *
  7.  * @param     string      $string: Der zu filternde & zu sortierende String
  8.  * @param     string      $reg_ex_pattern: Optional - Der anzuwendende RegExPattern - Default: Buchstaben (unabhängig ob Groß- / Kleinschreibung) und Zahlen
  9.  * @param     boolean     $ascending: Flag ob aufsteigend (true) oder absteigend (false) sortiert werden soll
  10.  * @return    string      $new_string: Der gefilterte und sortierte String
  11.  */
  12. function sortRegExChar($string, $reg_ex_pattern = '/[a-zöäüß0-9]/i', $ascending = true)
  13. {
  14.   // Array für die sortierung deklarieren
  15.   $new_string_array = array();
  16.  
  17.   // Per for()-Schleife die einzelnen Zeichen des Strings...
  18.   for($i = 0; $i < strlen($string); $i++)
  19.   {
  20.     // ...in das Array packen - sofern der RegExPattern passt
  21.     if(preg_match($reg_ex_pattern, $string[$i]))
  22.     {
  23.       $new_string_array[] = strtolower($string[$i]);
  24.     }
  25.   } // ENDE: for($i = 0; $i < strlen($string); $i++)
  26.  
  27.   // Prüfen wie sortiert werden soll
  28.   if($ascending == true)
  29.   {
  30.     // Aufsteigend
  31.     sort($new_string_array);
  32.   }
  33.   else
  34.   {
  35.     // Absteigend
  36.     rsort($new_string_array);
  37.   }
  38.  
  39.   // Aus dem sortierten Array wieder einen String basteln
  40.   $new_string = implode('', $new_string_array);
  41.  
  42.   return $new_string;
  43.  
  44. } // ENDE: function sortRegExChar($string, $reg_ex_pattern = '/[a-zöäüß0-9]/i', $ascending = true)
  45.  
  46.  
  47.  
  48.  
  49. /**
  50.  * Funktion die die in einem String vorkommenden Zeichen anhand eines
  51.  * RegExPattern filtert und zählt. Zudem wird das Return-Array
  52.  * aufsteigend/absteigend sortiert
  53.  *
  54.  * @param     string      $string: Der zu filternde & zu zählende String
  55.  * @param     string      $reg_ex_pattern: Optional - Der anzuwendende RegExPattern - Default: Buchstaben (unabhängig ob Groß- / Kleinschreibung) und Zahlen
  56.  * @param     boolean     $ascending: Flag ob aufsteigend (true) oder absteigend (false) sortiert werden soll
  57.  * @return    array       $char_counter_array: Ein Array mit den Counter-Werten pro Zeichen ($char_counter_array['a'] = 1 etc...)
  58.  */
  59. function countRegExChar($string, $reg_ex_pattern = '/[a-zöäüß0-9]/i', $ascending = true)
  60. {
  61.   // Array für den Counter deklarieren
  62.   $char_counter_array = array();
  63.  
  64.   // Per for()-Schleife die einzelnen Zeichen des Strings...
  65.   for($i = 0; $i < strlen($string); $i++)
  66.   {
  67.     // ...in das Array packen - sofern der RegExPattern passt
  68.     if(preg_match($reg_ex_pattern, $string[$i]))
  69.     {
  70.       // Wenn das Zeichen schon im Array enthalten ist...
  71.       if(isset($char_counter_array[$string[$i]]))
  72.       {
  73.         // ...Counter für das Zeichen erhöhen
  74.         $char_counter_array[strtolower($string[$i])]++;
  75.       }
  76.       else
  77.       {
  78.         // sonst Counter initialisieren
  79.         $char_counter_array[strtolower($string[$i])] = 1;
  80.       }
  81.      
  82.     } // ENDE: if(preg_match($reg_ex_pattern, $string[$i]))
  83.    
  84.   } // ENDE: for($i = 0; $i < strlen($string); $i++)
  85.  
  86.   // Prüfen wie sortiert werden soll
  87.   if($ascending == true)
  88.   {
  89.     // Aufsteigend
  90.     ksort($char_counter_array);
  91.   }
  92.   else
  93.   {
  94.     // Absteigend
  95.     krsort($char_counter_array);
  96.   }
  97.  
  98.   return $char_counter_array;
  99.  
  100. } // ENDE: function countRegExChar($string, $reg_ex_pattern = '/[a-zöäüß0-9]/i', $ascending = true)
  101. ?>

Beispiele zum Testen:

Php:
  1. <?php
  2.  
  3. // Beispiel-Pattern zum testen
  4. $pattern1 = '/[0-9]/';
  5. $pattern2 = '/[a-zöäüß]/i';
  6.  
  7.  
  8. // Beispiel-Strings zum testen
  9. $string1 = 'a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.ß.ß.ä.ä.ö.ö.ü.ü.';
  10. $string2 = 'Hier könnte jetzt Gott-weiß-was für ein Text stehen und es wäre egal - die Funktion würde es sortieren - aber nur Zeichen die dem RegexPattern "/[a-zöäüß]/i" entsprechen!';
  11. $string3 = '..::,,;;--__@@098456234234*+~#.:,;{())=\\!"§$%&/<>..::,,;;--__@@098456234234*+~#.:,;{())=\\!"§$%&/<>}';
  12.  
  13.  
  14. // Um Schreibarbeit zu sparen (Beim testen...)
  15. $benutzer_string = $string1;
  16. $benutztes_pattern = $pattern2;
  17.  
  18. $tmp = sortRegExChar($benutzer_string, $benutztes_pattern, true);
  19. $tmp_array = countRegExChar($benutzer_string, $benutztes_pattern, true);
  20.  
  21. echo 'Original: ' . $benutzer_string . '<hr />';
  22. echo 'Sortiert: ' . $tmp . '<hr />';
  23.  
  24. echo '<pre>Gezählt über countRegExChar():<br />';
  25.   print_r($tmp_array);
  26. echo '</pre><hr />';
  27.  
  28. ?>

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Slava
Administrator


Anmeldedatum: 16.01.2007
Beiträge: 282
Wohnort: Köln

BeitragVerfasst am: Fr 18 Apr, 2008 23:16    Titel: Antworten mit Zitat

http://de2.php.net/manual/de/function.count-chars.php
Very Happy

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    bituniverse.com Foren-Übersicht -> Code-Schnipsel Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB2.de
Powered by WebRing.