Как написать цикл while без дублирования кода вне цикла и внутри цикла

Код с дублированием

$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++;
}

-1

Решение

Более распространенный способ сделать то, что ваш после того, как назначить $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++;
}

Хотя имена делают его очень читабельным, он также делает код очень длинным, более короткие имена обычно более уместны.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector