Devo generare delle stringhe alfabetiche di tre caratteri formati dalla combinazione di questi caratteri tipo:
AAA
AAB
AAC
....
ZZX
ZZY
ZZZ
E devo generare in concatenazione altre stringhe formate da un carattere alfabetico e due numerici che se minori di 10 devono iniziare con lo 0 le quali verranno separate da un trattino.
nella fattispecie mi serve un output del tipo:
xxx-yzz
- dove con xxx intendo il set di caratteri sopra citati
- il trattino deve rimanere tale
- la y rappresenta una lettera dell'alfabeto dalla a alla z
- la zz rappresenta un numero che parte da 01 e finisce a 99
es. output
brc-d04.stringa_generica
La generazione dovrebbe essere incrementale e sequenziale quindi fornirmi tanti output quante sono le combinazioni possibili.
Le stringhe devono essere generate interamente, una dopo l'altra già finite affinchè queste possano essere successivamente memorizzate in una variabile il cui valore deve subire controlli successivi prima di essere stampato (per i controlli non ci sono problemi so come fare).
La mia difficoltà sta nel fatto che la stringa è composta.
Un codice di questo tipo:
Non va bene perché genera le stringhe una ad una prima di stamparle. Il tutto devo riuscire a farlo senza DB e senza file intermedi tipo file xml o di testo.codice:<?php $maxLength = 3; $charSet = 'abcdefgjhklmnopqrstuvwxyz'; $size = strlen($charSet); $base = array(); $counter = 0; $baseSize = 3; // Let's see how many combinations exist for the given length and charset $combinations = 0; for($i=1;$i<=$maxLength;$i++) { $combinations += pow($size,$i); } echo "There are $combinations possible combinations!<br/><br/>"; while($baseSize <= $maxLength) { // Go through all the possible combinations of last character and output $base for($i=0;$i<$size;$i++) { $base[0] = $i; for($j=$baseSize-1;$j>=0;$j--) { echo $charSet[$base[$j]]; } echo '<br/>'; } // How many $base elements reached their max? for($i=0;$i<$baseSize;$i++) { if($base[$i] == $size-1) $counter++; else break; } // Every array element reached max value? Expand array and set values to 0. if($counter == $baseSize) { // Notice <=$baseSize! Initialize 0 values to all existing array elements and ADD 1 more element with that value for($i=0;$i<=$baseSize;$i++) { $base[$i] = 0; } $baseSize = count($base); } // Carry one else { $base[$counter]++; for($i=0;$i<$counter;$i++) $base[$i] = 0; } $counter=0; } ?>
Ringrazio in anticipo tutti quelli che hanno perso tempo a leggere questo post e spero in una risposta che risolva il mio problema.
Saluti