Так а в чем вопрос? У вас же переменная переписывается внутри цикла, во втором ифе? Учитесь дебажить:
$selected_cat = 1111; // если тут прописать переменную, то выводит её значение которое тут
$deb = [];
$i = 0;
foreach ($aTabs as $aTab) {
foreach ($aTab['OPTIONS'] as $key => $arOption) {
$deb[$i]['key'] = $key;
if ($request['apply']) {
$deb[$i]['apply'] = 1;
$optionValue = $request->getPost($arOption[0]);
$deb[$i]['optionValue'] = $optionValue;
if ($arOption[0] == 'select_cat') {
$deb[$i]['arOption'] = $arOption[0];
$deb[$i]['selected_cat_1'] = $selected_cat;
$selected_cat = $optionValue; //тут у вас на какой-то итерации пусто, и переменная дохнет
$deb[$i]['selected_cat_2'] = $selected_cat;
Option::set($module_id, 'qqqqq', $key );/// выводит 1
}
Option::set($module_id, 'sssss', $selected_cat );// выводит переменную
if ($arOption[0] == 'start_load_product') {
echo $key; // выводит 2
Option::set($module_id, 'qqqqq', $key );// выводит 2
Option::set($module_id, 'sssss', $selected_cat );// переменная пустая
}
}
}
$i++;
}
echo '<pre>' . print_r($deb,1).'</pre>'; exit;