2016-06-20 4 views
0

Ich möchte eine Benutzereingabe (String) nehmen und sie in eine Liste von Wortkombinationen (Array) aller möglichen Längen umwandeln, aber nur die Kombinationen behalten, die in der Reihenfolge sind.PHP: Wie kann ich alle möglichen Sequenzen beliebiger Länge innerhalb einer Zeichenkette finden?

$newArray = ["this","string","will","be","chopped","up","this string","will be","be chopped","chopped up","this string will","string will be","be chopped up"];

Mein Code (nicht funktioniert) wird wie folgt:

Also das Array in der unten würde schließlich lesen PHP aufgeführt

PHP

$str = "This string will be chopped up."; 
$str = strtolower($str); 
$strSafe = preg_replace("/[^0-9a-z\s-_]/i","",$str); 
$array = explode(" ", $strSafe); 
$newArray = []; 
$newArrayEntry = []; 

for($counter=0; $counter < COUNT($oneword); $counter++) { 

    // List single words - as in array $oneword. 
    echo "One word: "; 
    echo $oneword[$counter]; 
    echo "<br />"; 

    $counterTwo = $counter+1;  

    if($counterTwo <= COUNT($oneword)) { 
     $newArrayEntry[COUNT($newArrayEntry)] = $oneword[$counter]; 
     print "Adding counter One to newArray Entry: ".$oneword[$counter]."<br />"; 
     for($counterThree=($counter+1); $counterThree < $counterTwo; $counterThree++) { 
      $newArrayEntry[COUNT($newArrayEntry)] = $oneword[$counterThree]; 

      if($counterThree - $counterTwo == 1) { 
       $newArrayEntry[COUNT($newArrayEntry)] = $oneword[$counterTwo]; 
       print "Adding counter Two to newArrayEntry: ".$oneword[$counterTwo]."<br />"; 
      } 
     } 
     $newArrayString = join(' ', $newArrayEntry); 
     $newArray[COUNT($newArray)] = $newArrayString; 
    } 
} 
+1

„String“ fehlt ... – trincot

+1

Sie Push verwenden können Werte zu Ihrem Array hinzuzufügen ... und in der Gegen Schleife müssen Sie einen anderen Zähler sowie weit Ich kann es sehen, um Ihr Grundarray von verschiedenen Punkten und verschiedenen Längen zu durchlaufen. – Medda86

+0

Danke Medda! Nicht sicher, was du meinst Trincot. –

Antwort

2

Sie könnte diesen Code verwenden:

$str = "This string will be chopped up."; 
$str = strtolower($str); 
$strSafe = preg_replace("/[^0-9a-z\s-_]/i","",$str); 
$array = explode(" ", $strSafe); 
$newArray = []; 

for ($len = 1; $len <= count($array); $len++) { 
    for($start = 0; $start+$len <= count($array); $start++) { 
     $newArray[] = implode(" ", array_slice($array, $start, $len)); 
    } 
} 


var_export($newArray); 

Ausgang:

array (
    0 => 'this', 
    1 => 'string', 
    2 => 'will', 
    3 => 'be', 
    4 => 'chopped', 
    5 => 'up', 
    6 => 'this string', 
    7 => 'string will', 
    8 => 'will be', 
    9 => 'be chopped', 
    10 => 'chopped up', 
    11 => 'this string will', 
    12 => 'string will be', 
    13 => 'will be chopped', 
    14 => 'be chopped up', 
    15 => 'this string will be', 
    16 => 'string will be chopped', 
    17 => 'will be chopped up', 
    18 => 'this string will be chopped', 
    19 => 'string will be chopped up', 
    20 => 'this string will be chopped up', 
) 
+0

Danke für die Optimierung, aber ich brauche es auch zu lesen ... Array (... (Forts.) 'String wird', 'String wird', [...] 'wird', 'wird gehackt werden "," wird gehackt "," gehackt "," gehackt "," gehackt ") Ich denke, ich habe es gelöst. Ich werde heute Abend nur testen, und ich werde meine Frage aktualisieren, um die Antwort aufzunehmen. Vielen Dank! –

+1

Die Werte, die Sie erwähnen, sind alle in der Ausgabe, oder ich verstehe nicht, was Sie meinen. Soweit ich sehen kann, ist die Ausgabe, die von meinem Code produziert wird, in Übereinstimmung mit Ihrer Frage .... Bitte, stellen Sie auch keine Antwort in die Frage, sondern posten Sie stattdessen eine Antwort ... als Antwort. – trincot

+0

Sorry ... Ich habe das komplett falsch verstanden. Ich denke, ich hatte es mit einer anderen Frage vermischt .... Danke !!! :) (Ich wollte die Regeln für die Beantwortung Ihrer eigenen Fragen vor der Veröffentlichung lesen ... nicht sehr gut in Best Practices hier. Obwohl jetzt muss ich nicht!) –

Verwandte Themen