$n = count($all_question)-1;
$answers = array();
$answer = array_fill(0,$n,1);
$change = $n;
while ($change > 0 || $answer[$change]<$all_question[$change]->answer_count)
{
if ($answer[$change]<$all_question[$change]->answer_count)
{
$answer[$change]++;
$answers[] = implode($answer,',');
$change = $n;
}
else
{
$answer[$change]=1;
$change--;
}
}
I tested it with this output.
The first question has 3 answers
second has only 1
third 2
4th 3
Array
(
[0] => 1,1,1,1
[1] => 1,1,1,2
[2] => 1,1,1,3
[3] => 1,1,2,1
[4] => 1,1,2,2
[5] => 1,1,2,3
[6] => 2,1,1,1
[7] => 2,1,1,2
[8] => 2,1,1,3
[9] => 2,1,2,1
[10] => 2,1,2,2
[11] => 2,1,2,3
[12] => 3,1,1,1
[13] => 3,1,1,2
[14] => 3,1,1,3
[15] => 3,1,2,1
[16] => 3,1,2,2
[17] => 3,1,2,3
)