我有一个用于在表格中显示数据的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(); ?>
答案 0 :(得分:0)
嗯,这里没什么好处的,我害怕。其中一些不直接回答你的问题,但有一些点可能会有所帮助