JON
JON

Reputation: 1013

use foreach loop dynamically in php

i want use foreach loop dynamically in php, i have task to print AAA to 999 and i'm using this code and it's work perfect,

Reference :: http://www.onlinecode.org/generate-string-aaaa-9999-using-php-code/

$addalphabeth = array_merge(range('A', 'Z'), range(0,9));
$setcharacter = [];
foreach ($addalphabeth as $setcharacter[0]) {
  foreach ($addalphabeth as $setcharacter[1]) {
    foreach ($addalphabeth as $setcharacter[2]) {
        //$setcatalog[] = vsprintf('%s%s%s', $setcharacter);
        echo "<b>".vsprintf('%s%s%s', $setcharacter)."</b>";
        echo "<br>";
    }
  }
}

now my issue is have to print that AAAAA to 99999 (need loop 5 time) or AAAAAAAA to 99999999 (need loop 8 time) , so for this i use loop n time. I have no idea how to do it, any help or suggestion will be appreciated.

Upvotes: 2

Views: 310

Answers (1)

Nic3500
Nic3500

Reputation: 8611

Evening, here is my solution, using recursion. To setup a recursion, you have to think of two things. What is your stop condition, and what do to with non-stopping conditions.

  • Stopping condition: when you ask for only 1 char width, simply loop through each member of $addalphabeth. And since that width == 1 scenario will happen when the final width you want is >1, add the prefix to it.
  • Non-stopping condition: lets start with width 2. You want the every first char to be followed by all possible second chars. So call the function with width = 1 and prefix = the first char.
  • for 3, you want the first char followed by every char in the second position, followed by every char in the third position.
  • and so on...
  • So the general case is: from left to right, with n chars width, loop on every char, and print every possible combination of n-1 chars after it.

So here is the code:

function printAto9($width,$prefix = '')
{
    $chars = array_merge(range('A', 'Z'), range(0,9));
    if ($width == 1)
    {
        foreach ($chars as $char)
        {
            echo "$prefix$char\n";
        }
    }
    else
    {
        $width--;
        foreach ($chars as $char)
        {
            echo printAto9($width,$prefix . $char);
        }
    }
}

printAto9(5);

I put printAto9(5); as a test, you can use whatever. But careful, the output is monstrous pretty quick, and you can kill your php (memory or time limit).

Upvotes: 1

Related Questions