2016-06-16 12 views
0

Ich muss eine String-Liste mit N-Länge und M möglichen Zeichen generieren. Zurzeit verwende ich PHP/XAMPP.generieren String-Liste (n Länge) mit m möglichen Zeichen

Meine Funktion eignet sich hervorragend zum Erzeugen der Strings mit 62 möglichen Zeichen (a-z, A-Z, 0-9) und bis zur Länge von 4 Zeichen. Wenn ich jedoch längere Strings erzeugen möchte, ist der Speicher knapp.

Ich habe das Speicherlimit festgelegt, aber ich habe immer noch nicht genügend Arbeitsspeicher. Ich

ini_set('memory_limit', '-1'); 

die Fehlermeldung erhalten:

Fatal error: Out of memory (allocated 1858600960) (tried to allocate 36 bytes) in C:\xampp\htdocs\index.php on line 51 

wie kann ich dieses Problem lösen? Sollte ich beim Erzeugen der String-Liste zu einer anderen Sprache wechseln, um mehr Leistung zu erzielen?

EDIT, der Code Ich arbeite mit:

http://pastebin.com/f6pA6Ra0 
+0

Ich glaube, Sie müssen Ihren Code Refactoring, weil ich denke, Sie regex verwenden und algoritmth rekursiv zu erhalten. p.s. Entschuldigung für mein Englisch. – Naumov

+0

@Naumov, danke für deine Antwort. Ich verwende keine Regex, aber ja, die Funktion, die ich verwende, ist rekursiv – daniel

+2

Bitte geben Sie Ihren Code. –

Antwort

0

versuchen Sie, mit M als mögliche Zeichen eine zufällige Zeichenfolge mit 5 Länge zu bekommen?

dann schlagen wobei I ein zufälliges Element von M 5-fache, und nicht ein Array von jede einzelne Möglichkeit machen (die 916'132'832 Möglichkeiten (62^5) mit diesem Array von Zeichen und Länge von 5 !)

Hier ist eine nicht-rekursive Funktion, die eine zufällige Zeichenfolge zurückgibt, in der Sie die Größe definieren können.

function sampling($size){ 
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'; 
    $output = ''; 
    $charLength = strlen($chars) - 1; 
    for ($i = 0; $i < $size; $i++) { 
     $n = rand(0, $charLength); 
     $output .= $chars[$n]; 
    } 
    return $output; 
} 

wenn ich falsch verstanden Ihre Absichten und Sie wirklich wollen, alle Möglichkeiten bekommen tut mir leid;)

Verwandte Themen