2014-12-16 10 views
6

Wie kann ich eine inkrementelle ID in PHP-Mischnummern, unteren und oberen Buchstaben generieren?Generieren inkrementelle ID von Zahlen, oberen und unteren Buchstaben

Zum Beispiel habe ich versucht:

$hello = "aaa0"; 

for ($i=0; $i < 10000; $i++) { 
    echo $hello++; 
    echo "<br>"; 
} 

Dann kehrt;

aaa0 
aaa1 
aaa2 
... 
aaa9 
aab0 
aab1 

würde Ich mag Strings erzeugen: von 0 bis 9

aaa0 
aaa1 
aaa2 
... 
aaaa 
aaab 
aaac 
... 
aaaz 
aaaA 

Erste Zahlen, verkohlt dann von a bis z, verkohlt dann von A bis Z. Jeder Positions Zeichen in diese gehen sollte Angebot.

Wie kann ich es tun?

EDIT: Ich möchte, dass jedes Zeichen in der Zeichenfolge in diesem Bereich variiert. Ich möchte von 0 bis 9 gehen, dann von a bis z, dann von A bis Z. Wenn es endet, geht das Zeichen auf 0 und das Zeichen auf der linken Seite erhöht sich um eins. Zum Beispiel:

0000 
0001 
0002 
... 
0009 
000a 
000b 
... 
000y 
000z 
000A 
000B 
... 
000X 
000Z 
0010 
0011 
0012 
.... 
0019 
001a 
+2

Warum verwenden Sie Ihre db-Funktion nicht, um Werte automatisch zu inkrementieren? –

+0

Ich habe versucht, auto_increment in der Spalte zuweisen, aber es mir nicht mit Zeichen (MySQL) –

+1

Auto-Inkrement ist nur numerisch ich denke. Sie können ein anderes Feld mit Ihrem Text + Real-ID haben. –

Antwort

2

Mit 0,1-9, a-z und A-Z ist "Base 62". Die Konvertierung von Base 10 auf Base 62 ist in PHP sehr einfach.

<?php 
echo base_convert(10123, 10,26), "\n"; 
// outputs: 'ep9' 
echo base_convert('ep9', 26, 10), "\n"; 
// output 1
+0

Vielen Dank, es funktioniert –

5

Dies sollte für Sie arbeiten:

<?php 

    $hello = "aaa"; 

    //'aaa0' -> 'aaa9' 
    for ($count = 0; $count <= 9; $count++) 
     echo $hello . $count . "<br />"; 
    //'aaaa' -> 'aaaz' 
    foreach (range('a', 'z') as $char) 
     echo $hello . $char . "<br />"; 
    //'aaaA' -> 'aaaZ' 
    foreach (range('A', 'Z') as $char) 
     echo $hello . $char . "<br />"; 

?> 

EDIT:

Diese nur mit 3-stelligen Werke. Nachdem du keinen Speicher mehr hast.

<?php 

    $array = array(); 
    $maxLength = 3; 
    $output = array(); 

    ini_set('memory_limit', '-1'); 
    $time_start = microtime(true); 

    foreach(range(0, 9) as $number) 
     $array[] = $number; 
    foreach(range('a', 'z') as $char) 
     $array[] = $char; 
    foreach(range('A', 'Z') as $char) 
     $array[] = $char; 


    function everyCombination($array, $arrLength, $size, $perArr = array(), $pos = 0, &$found = array()) { 
     if ($size == $pos) { 
      $found[] = vsprintf("%s%s%s", $perArr); 
      return; 
     } 

     for ($count = 0; $count < $arrLength; $count++) { 
      $perArr[$pos] = $array[$count]; 
      everyCombination($array, $arrLength, $size, $perArr, $pos+1, $found); 
     } 
     return $found; 
    } 

    $output = everyCombination($array, count($array), $maxLength); 

    for($count = 0; $count < count($output); $count++) 
     echo $output[$count] . "<br/>"; 

    echo "DONE!"; 
    $time_end = microtime(true); 
    $time = $time_end - $time_start; 
    echo round($time,2) . " s"; 

?> 
+0

perfekte Antwort +1 –

+1

@ Rizier123 Sie können 'range()' für Zahlen auch verwenden und 'foreach' stattdessen verwenden, den Code zu vereinheitlichen. – Alex

+0

Ich habe es versucht, aber ich möchte, dass jedes Zeichen in der Zeichenfolge in diesem Bereich variiert –

Verwandte Themen