Код с дублированием
$recommendations_next_months = [];
$monthNumber = 2;
$recommendations_products_ids_next = salient_child_get_next_products_ids_recommendations_bunch(
$recommendations,
$recommendations_groups,
$excluded_products_ids,
3
);
while ( !empty( $recommendations_products_ids_next ) ) {
$recommendations_next_months[] = [
'title' => "Рекомендации на $monthNumber месяц",
'products-ids' => $recommendations_products_ids_next,
];
$recommendations_products_ids_next = salient_child_get_next_products_ids_recommendations_bunch(
$recommendations,
$recommendations_groups,
$excluded_products_ids,
3
);
$monthNumber++;
}
Одно из возможных решений — это использование while(true)
с break
, Но это решение имеет дополнительную цикломатическую сложность и добавляет ответвление к коду.
while ( true ) {
$recommendations_next_months = [];
$monthNumber = 2;
$recommendations_products_ids_next = salient_child_get_next_products_ids_recommendations_bunch(
$recommendations,
$recommendations_groups,
$excluded_products_ids,
3
);
if ( empty( $recommendations_products_ids_next ) ) {
break;
}
$recommendations_next_months[] = [
'title' => "Рекомендации на $monthNumber месяц",
'products-ids' => $recommendations_products_ids_next,
];
$monthNumber++;
}
Более распространенный способ сделать то, что ваш после того, как назначить $recommendations_products_ids_next
в фактическом while()
само по себе, так что это будет выборка следующего элемента и завершится, если значение оценивается как false
(вам может понадобиться добавить !empty()
но было бы лучше без, если это работает).
$recommendations_next_months = [];
$monthNumber = 2;
while ( $recommendations_products_ids_next = salient_child_get_next_products_ids_recommendations_bunch(
$recommendations, $recommendations_groups, $excluded_products_ids, 3 )) {
$recommendations_next_months[] = [
'title' => "Рекомендации на $monthNumber месяц",
'products-ids' => $recommendations_products_ids_next,
];
$monthNumber++;
}
Хотя имена делают его очень читабельным, он также делает код очень длинным, более короткие имена обычно более уместны.
Других решений пока нет …