I need to create a list of urls for all possible combinations from a set of filters/parameters.
Input
$data = array(
    array(
        'vehicle=car',
        'vehicle=bike',
        'vehicle=plane',
    ),
    array(
        'fruit=apple',
        'fruit=banana',
        'fruit=strawberry'
    ),
    array(
        'music=pop',
        'music=rock',
        'music=jazz'
    )
);
The generated items must have the parameters in alphabetical order.
For example:
INCORRECT: ?vehicle=bike&fruit=apple&music=rock
CORRECT: ?fruit=apple&music=rock&vehicle=bike
Output
?vehicle=car
?vehicle=bike
?vehicle=plane
?fruit=apple&vehicle=car
?fruit=banana&vehicle=car
?fruit=strawberry&vehicle=car
?fruit=apple&vehicle=bike
?fruit=banana&vehicle=bike
?fruit=strawberry&vehicle=bike
?fruit=apple&vehicle=plane
?fruit=banana&vehicle=plane
?fruit=strawberry&vehicle=plane
?fruit=apple&music=pop&vehicle=car
?fruit=apple&music=rock&vehicle=car
?fruit=apple&music=jazz&vehicle=car
?fruit=banana&music=pop&vehicle=car
?fruit=banana&music=rock&vehicle=car
?fruit=banana&music=jazz&vehicle=car
?fruit=strawberry&music=pop&vehicle=car
?fruit=strawberry&music=rock&vehicle=car
?fruit=strawberry&music=jazz&vehicle=car
?fruit=apple&music=pop&vehicle=bike
?fruit=apple&music=rock&vehicle=bike
?fruit=apple&music=jazz&vehicle=bike
?fruit=banana&music=pop&vehicle=bike
?fruit=banana&music=rock&vehicle=bike
?fruit=banana&music=jazz&vehicle=bike
?fruit=strawberry&music=pop&vehicle=bike
?fruit=strawberry&music=rock&vehicle=bike
?fruit=strawberry&music=jazz&vehicle=bike
?fruit=apple&music=pop&vehicle=plane
?fruit=apple&music=rock&vehicle=plane
?fruit=apple&music=jazz&vehicle=plane
?fruit=banana&music=pop&vehicle=plane
?fruit=banana&music=rock&vehicle=plane
?fruit=banana&music=jazz&vehicle=plane
?fruit=strawberry&music=pop&vehicle=plane
?fruit=strawberry&music=rock&vehicle=plane
?fruit=strawberry&music=jazz&vehicle=plane
?music=pop&vehicle=car
?music=rock&vehicle=car
?music=jazz&vehicle=car
?music=pop&vehicle=bike
?music=rock&vehicle=bike
?music=jazz&vehicle=bike
?music=pop&vehicle=plane
?music=rock&vehicle=plane
?music=jazz&vehicle=plane
?fruit=apple
?fruit=banana
?fruit=strawberry
?fruit=apple&music=pop
?fruit=apple&music=rock
?fruit=apple&music=jazz
?fruit=banana&music=pop
?fruit=banana&music=rock
?fruit=banana&music=jazz
?fruit=strawberry&music=pop
?fruit=strawberry&music=rock
?fruit=strawberry&music=jazz
?music=pop
?music=rock
?music=jazz
Is there anyone that could help me out with this. I've been struggling with it for two days now but I can't seem so find a correct solution. There are a lot of (almost) similar issues on Stackoverflow but none of them seems to solve/fit my problem.
[SOLVED] Here is the final working version based on Dusan Plavak's answer:
function createFilterCombinations($data, &$urls = array(), $index = 0, $query = false){
    $keys = array_keys($data);
    $_query = $query;
    if ($index == count($data)) {
        return;
    }
    for($i=0; $i < count($data[$keys[$index]]); $i++){
        $query = $_query;
        if($index == 0){
            $query = "?" . $data[$keys[$index]][$i];
        }else{
            if($query != "?"){
                $query .= "&" . $data[$keys[$index]][$i];
            }else{
                $query .= $data[$keys[$index]][$i];
            }
        }
        $urls[] = $query;
        createFilterCombinations($data, $urls, $index+1, $query);
    }
    if($index == 0){
        $query = "?";
    } else {
        $query = $_query;
    }
    createFilterCombinations($data, $urls, $index+1, $query);
}
function prepareArray($array){
    $newArray = array();
    foreach ($array as $subArray) {
        sort($subArray);
        $newArray[substr($subArray[0], 0, strpos($subArray[0], '='))] = $subArray;
    }
    ksort($newArray);
    return $newArray;
}
createFilterCombinations(prepareArray($data), $result);
var_dump($result);
 
     
    