Funktion für Wortvarianten

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

  • Funktion für Wortvarianten

    Hi,

    ich versuche gerade eine Funktion zu basteln,
    die mir ein Array von allen möglichen Wortvarianten (ohne Leerzeichen) liefert:

    z.B.:
    Code:
    $begriff = "abc def geh ijk";
    $arrVarianten = myfunction($begriff);
    
    Ergebniss:
    Array(
      [0] = "abc def geh ijk"
    
      [1] = "abcdef geh ijk"
      [2] = "abc defgeh ijk"
      [3] = "abc def gehijk"
    
      [4] = "abcdefgeh ijk"
      [5] = "abc defgehijk"
      [6] = "abcdef gehijk"
    
      [7] = "abcdefgehijk"
    )
    Im Feld 1-3 wurden jeweils 1 Leerzeichen rausgenommen
    im Feld 4-6 jeweils 2
    und in 7 alle 3.

    Wollte eigentl. anhand der Anzahl der Leerzeichen (substr_count) eine Schleife Bilden und jeweils x Leerzeichen ersetzen, funktioniert auch,
    nur komm ich mit der Lösung nicht an Ergebniss 6 ran, wo das erste und letzte Zeichen ersetzt wurde ..

    Irgendjemand ne Idee ?
    Danke vielmals!

  • #2
    Hallo,

    wofür brauchst du das? Vielleicht kann man das ja auch anders lösen?

    Jedenfalls: Stell dir dir Anzahl der Leerzeichen (n) als Bitbreite eines Registers vor.

    Beispiel:
    5 Leerzeichen (n = 5)
    Register: xxxxx
    Minimum: 00000 (= 0)
    Maximum: 11111 (= 31)

    Ist ein Bit gesetzt, entspricht das einem ersetzten Leerzeichen. Ein 0-Bit entspricht dem beibehaltenen Leerzeichen. Jetzt musst du nur mit einer for-Schleife alle Werte von 0 bis 2^n - 1 durchgehen, und jeden Wert - als Binärmuster interpretiert - als Vorgabe für die zu ersetzenden Leerzeichen hernehmen.

    [COLOR="Red"]Edit[/COLOR]: Die Funktion hat 18 Zeilen und das kommt dann dabei raus (die Reihenfolge ist etwas anders als bei dir, aber das ist ja hoffentlich egal):
    PHP Code:
    Array
    (
        [
    0] => abc def geh ijk
        
    [1] => abc def gehijk
        
    [2] => abc defgeh ijk
        
    [3] => abc defgehijk
        
    [4] => abcdef geh ijk
        
    [5] => abcdef gehijk
        
    [6] => abcdefgeh ijk
        
    [7] => abcdefgehijk

    Gruß,

    Amica
    Last edited by AmicaNoctis; 02-02-2010, 16:14.
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Comment


    • #3
      Hallo AmicaNoctis,

      dein Ergebnis sieht klasse aus,
      aber mit der Erklärung mit der Bitbreite und des Registers komm ich überhaupt nicht klar ??
      Kannst du mir das genauer erklären?

      Danke

      Comment


      • #4
        Kennst du dich mit Binärlogik aus? Nullen, Einsen und Zweierpotenzen? Jedenfalls gibt es immer 2^n Wortvarianten, wobei n die Anzahl der Leerzeichen ist. Wenn du also von 0 bis 2^n - 1 hochzählst, hast du alle Wortvarianten als Bitmuster, z. B. 5 = b101 = (ersetzen, lassen, ersetzen) = "abcdef gehijk".

        Hilft das?
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Comment

        Working...
        X