-3

I have an alphabet array:

$ga = array_merge(range('A', 'Z'), range(0,9));

How can I generate next strings:

AAAA, AAAB... AAAZ, AAA0... AAA9, AABA, AA9A... ABAA... 9999

Thanks!

Choo Hwan
  • 416
  • 3
  • 12

1 Answers1

1

This probably is the easiest approach:

<?php
$alphabeth = array_merge(range('A', 'Z'), range(0,9));
$character = [];
foreach ($alphabeth as $character[0]) {
  foreach ($alphabeth as $character[1]) {
    foreach ($alphabeth as $character[2]) {
      foreach ($alphabeth as $character[3]) {
        $catalog[] = vsprintf('%s%s%s%s', $character);
      }
    }
  }
}
print_r($catalog);

The output obviously is:

Array
(
    [0] => AAAA
    [1] => AAAB
    [2] => AAAC
    [3] => AAAD
    .....
    [1679613] => 9997
    [1679614] => 9998
    [1679615] => 9999
)

UPDATE:

You mention in the comments below that you need to fill these strings into a file, if I got you right. If so, then this would be an example for a sequential processing which dramatically reduces the scripts memory footprint, as also mentioned in the comments:

<?php
$alphabeth = array_merge(range('A', 'Z'), range(0,9));
$handle = fopen('/home/arkascha/catalog.list', 'w');
foreach ($alphabeth as $character[0]) {
  foreach ($alphabeth as $character[1]) {
    foreach ($alphabeth as $character[2]) {
      foreach ($alphabeth as $character[3]) {
        fwrite($handle, vsprintf("%s%s%s%s\n", $character));
      }
    }
  }
}
fclose($handle);
arkascha
  • 41,620
  • 7
  • 58
  • 90
  • I'm crying :) 512 MB of memory is not enough Thanks for the good answer. – Choo Hwan Jul 05 '17 at 09:45
  • @ChooHwan Question is if you _really_ need such a static catalog. When it comes to efficiency then usually a sequential processing of data is the better approach than this. – arkascha Jul 05 '17 at 10:40
  • I got it. Thank you! I had to fill in these strings with a text file. – Choo Hwan Jul 05 '17 at 12:45
  • I don't have any personal experience using php's `yield`; can this be integrated to get around the memory? I honestly don't know. – mickmackusa Jul 05 '17 at 12:46
  • @ChooHwan Sorry, no, a generator does not get you around the nested loops creating a huge array, which is the actual issue. It is just another way of iterating, typically used for more complex iteration strategies. What you are looking for is a sequential processing strategy as already mentioned. I updated the answer and added an example for that. How this helps :-) – arkascha Jul 05 '17 at 12:58