2014-12-16 14 views
6

Php karıştırma sayılarında, alt ve üst harflerde artan bir kimliği nasıl oluşturabilirim?Sayıların artan sayısı, Üst ve Alt harfler üret

Örneğin, güvenilir:

$hello = "aaa0"; 

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

Daha sonra, döner; Daha sonra her pozisyonel karakter bu gitmeli A'dan Z'ye sonra, a dan z ye kömürleşir kömürleşir, 0'dan 9'a kadar

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

İlk numaralar:

aaa0 
aaa1 
aaa2 
... 
aaa9 
aab0 
aab1 

Ben dizeleri oluşturmak istiyorum aralık.

Bunu nasıl yapabilirim?

DÜZENLEME: Dize içindeki her karakterin bu aralıkta değişmesini istiyorum. 0'dan 9'a, sonra bire, sonra da A'dan Z'ye gitmek istiyorum. Bittiğinde, char 0'a gider, ve char da birer birer artar. Örneğin:

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

neden db işlevinizi auto_increment değerlerine kullanmıyorsunuz? –

+0

Sütuna auto_increment atamayı denedim, ancak chars (MySQL) –

+1

otomatik artış ile bana izin verme sanırım sadece sayısal olduğunu düşünüyorum. Metin + gerçek kimliğinizle başka bir alana sahip olabilirsiniz. –

cevap

2

0,1-9, a-z ve A-Z kullanımı "Base 62" dir. Temel 10'dan taban 62'ye dönüştürme, PHP'de çok kolaydır.

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

içinde sol artımlarda char Çok teşekkürler, işe yarıyor –

5

Bu sizin için çalışması gerekir:

<?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: Bu 3 basamaklı en ile çalışır

. Eminim hafızanız bittikten sonra.

<?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

mükemmel cevabı olan +1 –

+1

@ Rizier123 çözümlerinde 'range()' yi de numaralar için kullanabilirsiniz ve 'foreach' komutunu kullanın, kodu birleştirin. – Alex

+0

Denedim, ancak dizideki her karakterin bu aralıkta değişmesini istiyorum –

İlgili konular