function createOptionsVariantsArrayBySelectedInfo($startArray, $selectedOptionsVariantsArray, $mainOptions, $finalArray = array())
{
    foreach ($mainOptions as $mainOption) {
        if ($selectedOptionsVariantsArray[$mainOption]) {
            if (is_array($finalArray[$mainOption]) && !empty($finalArray[$mainOption])) {
                array_push($finalArray[$mainOption], array_keys($startArray[$mainOption]));
            } else {
                $finalArray[$mainOption][] = array_keys($startArray[$mainOption]);
            }
            if ($startArray[$mainOption][$selectedOptionsVariantsArray[$mainOption]] && is_array($startArray[$mainOption][$selectedOptionsVariantsArray[$mainOption]])) {
                $arrKeys = array();
                foreach ($startArray[$mainOption][$selectedOptionsVariantsArray[$mainOption]] as $recursiveKey => $elements) {
                    if (!in_array($selectedOptionsVariantsArray[$recursiveKey], array_keys($elements))) {
                        if (empty($arrKeys)) {
                            $newSelectedVariantsArray = $selectedOptionsVariantsArray;
                            $arrKeys = array_keys($elements);
                            $newSelectedVariantsArray[$recursiveKey] = $elements[$arrKeys[0]];
                        }
                    } else {
                        $newSelectedVariantsArray = $selectedOptionsVariantsArray;
                    }
                    $newMainOptions[$recursiveKey] = $recursiveKey;
                }
                $finalArray = createOptionsVariantsArrayBySelectedInfo($startArray[$mainOption][$selectedOptionsVariantsArray[$mainOption]], $newSelectedVariantsArray, $newMainOptions, $finalArray);
            }
        }
    }
    return $finalArray;
}
function createOptionsVariantsArrayBySelectedInfo($startArray, $selectedOptionsVariantsArray, $finalArray = array())
{
    foreach ($startArray as $key1 => $element1) {
        if ($selectedOptionsVariantsArray[$key1]) {
            if (is_array($finalArray[$key1]) && !empty($finalArray[$key1])) {
                array_push($finalArray[$key1], array_keys($element1));
            } else {
                $finalArray[$key1][] = array_keys($element1);
            }
            if (is_array($element1[$selectedOptionsVariantsArray[$key1]])) {
                $finalArray = createOptionsVariantsArrayBySelectedInfo($element1[$selectedOptionsVariantsArray[$key1]], $selectedOptionsVariantsArray, $finalArray);
            }
        }
    }
    return $finalArray;
}