代码之家  ›  专栏  ›  技术社区  ›  sftt

如何编写“while”循环而不在循环外和循环内重复代码[关闭]

  •  -1
  • sftt  · 技术社区  · 7 年前

    重复的代码

    $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 回复  |  直到 7 年前
        1
  •  2
  •   Nigel Ren    7 年前

    一种更常见的方法是分配 $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++;
    }
    

    虽然名称使它非常可读,但它也使代码非常长,较短的名称通常更合适。