使用固定"优化循环,如果"语句

时间:2018-03-16 11:06:04

标签: php loops optimization

我有一个用于在表格中显示数据的PHP函数,该表格与数据本身一起也接受带有应显示的字段的变量。

例如,在查看我想要了解的所有数据时,"提供商"每行,但如果我列出与提供商X相关的数据,我不需要"提供商"柱。

所以我有类似

的东西
$show['provider'] = true

并在使用

输出单元格的代码之前
if($show['provider'])

然而,当有大约20个不同的字段并且输出数千行时,考虑到每个"如果"那么这开始感觉不是最佳的。将有相同的结果 - 只执行一次就足够了,而不是每次循环。

一个可能的解决方案是为不同的列表创建不同的代码,但这对于代码维护来说非常糟糕。另一个是使用eval()

但即使数据经过适当消毒,我也不确定风险是否值得。

所以我的问题有两个:

a)有没有办法避免成千上万的"如果"通过在代码执行之前预处理代码?

b)真的值得它还是成千上万的" ifs"如此容易在现代硬件上执行,它根本不是问题?

编辑:这是代码的摘录。我使用的是Laravel,这是使用Blade模板引擎生成的,但由于我的问题并不局限于Laravel,因此我编辑了代码以使其更清晰。

<!-- foreach($acts as $act) loop -->
    <?php $__currentLoopData = $acts; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $act): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
            <tr data-id="<?php echo e($act->id); ?>">
                <?php if($show['alias']): ?>
                    <td class="dt-alias"><?php echo e($act->getAlias()); ?></td>
                <?php endif; ?>
                <?php if($show['status']): ?>
                    <td class="dt-status"><?php echo $act->getDisplayStatus(); ?></td>
                <?php endif; ?>
                <?php if($show['type']): ?>
                    <td class="dt-type"><?php echo e($act->getType()); ?></td>
                <?php endif; ?>
                <?php if($show['entity']): ?>
                    <td class="dt-entity"><?php echo e($act->getEntity()); ?></td>
                <?php endif; ?>
                <?php if($show['provider']): ?>
                    <td class="dt-provider"><?php echo e($act->getProvider()); ?></td>
                <?php endif; ?>
                <!-- … -->
        </tr>
    <?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>

1 个答案:

答案 0 :(得分:0)

嗯,这里没什么好处的,我害怕。其中一些不直接回答你的问题,但有一些点可能会有所帮助

  1. 通常无论如何你都不应该提供大量的记录,所以表现明智,收益应该低于边际。
  2. 如果由于一些奇怪的原因你需要完全表现,那么你可以使用一个类来避免那些数千个的IF被执行,如果你有php72你可以使用方法覆盖给你为每个案例编写函数的机会。 虽然你可以拥有尽可能多的功能组合,但这些功能都是指数级的。
  3. 直接使用bool变量代替$ show [&#39;某些东西&#39;]会稍微提高性能,具体取决于您拥有的数千个。
  4. 拥有php7.x可以大大提高性能,如果你还没有。
  5. 仅查询您需要的还可以提高性能
  6. 恕我直言,如果很难避免,也许其他人可能会带来别的东西。