【问题标题】:How to loop a php code?如何循环一个php代码?
【发布时间】:2016-05-17 07:43:20
【问题描述】:

我想在我的代码中使用DRY 方法,但我很难弄清楚。而且,如果没有image_1,我想隐藏整个代码。希望你能帮我解决这个问题。

这是代码

<div class="col-md-4">
    <?php
    $image = get_field('image_1');
    if(get_field('image_1'))
    {
        echo '<a href="' . get_field('image_link_1') . '">';?>
        <img src="<?php echo $image['url']; ?>" title="<?php echo $image['title']; ?>" alt="<?php echo $image['alt']; ?>" />
        <?php echo '</a>';
    } else {
        echo '<img src="http://localhost/image.png">';
    } ?>
</div>
<div class="col-md-4">
    <?php
    $image = get_field('image_2');
    if(get_field('image_2'))
    {
        echo '<a href="' . get_field('image_link_2') . '">';?>
        <img src="<?php echo $image['url']; ?>" title="<?php echo $image['title']; ?>" alt="<?php echo $image['alt']; ?>" />
        <?php echo '</a>';
    } else {
        echo '<img src="http://localhost/image.png">';
    } ?>
</div>
<div class="col-md-4">
    <?php
    $image = get_field('image_3');
    if(get_field('image_3'))
    {
        echo '<a href="' . get_field('image_link_3') . '">';?>
        <img src="<?php echo $image['url']; ?>" title="<?php echo $image['title']; ?>" alt="<?php echo $image['alt']; ?>" />
        <?php echo '</a>';
    } else {
        echo '<img src="http://localhost/image.png">';
    } ?>
</div>

【问题讨论】:

  • 你的问题到底是什么?
  • @JannisMattheis 我想循环代码。
  • 正如 Jannis 所说,很高兴您已经花了一些时间来解决这个问题!如果您向我们展示您已经走了多远,我们可以回答您的问题,您应该采取哪些不同的做法!
  • @stuXnet 我无法使循环工作。
  • 你确实没有实现了一个循环,但是...... :-(

标签: php loops dry


【解决方案1】:

您应该将差异放在数组中,然后将所有内容包装到 for 循环中:

<?php
  $images = array('image_1', 'image_2', 'image_3');
  $links = array('image_link_1', 'image_link_2', 'image_link_3');

  for($i=0; $i<3; $i++){
?>
<div class="col-md-4">
  <?php
    $image = get_field($images[$i]);
    if(get_field($images[$i])){
      echo '<a href="' . get_field($links[$i]) . '">';
  ?>
  <img src="<?php echo $image['url']; ?>" title="<?php echo $image['title']; ?>" alt="<?php echo $image['alt']; ?>" />
  <?php echo '</a>';
    } else {
      echo '<img src="http://localhost/image.png">';
    }
  ?>
</div>
<?php
  }
?>

【讨论】:

  • 顺便说一句,如果没有上传image_1,我该如何隐藏它?
  • @RubyAnnRosales 我可以想到多种解决方案,但最简单的一种可能是将for 条件更改为:for($i=0; $images[0] &amp;&amp; $i&lt;3; $i++)
  • 它不工作。 else 中回显的图像仍在显示。
【解决方案2】:

只是一个提示...:

<?php
  for ($i = 0; $i < 3; $i++) {
    echo "<div class='col-md-4'>" . "\n";
    $image = get_field("image_" . ($i + 1));
    ...
    echo "</div>" . "\n";
  }
?>

【讨论】:

    【解决方案3】:

    如果我对您的理解正确,这些方面的内容应该可以帮助您入门:

    <?php for ($q = 1; $q <= 3; $q++) {
        $image_loop = 'image_' . $q;
    
        echo '<div class="col-md-4">';
    
        if ($image = get_field($image_loop)) {
            echo '<a href="' . get_field('image_link_' . $q) . '">';
    ?>
            <img src="<?php echo $image['url']; ?>" title="<?php echo $image['title']; ?>" alt="<?php echo $image['alt']; ?>" />
            <?php echo '</a>';
        } else {
            echo '<img src="http://localhost/image.png">';
        } ?>
    </div>
    
    <?php } // end loop ?>
    

    【讨论】:

    • 但是,如果没有上传image_1,我该如何隐藏呢?
    • 这是留给你的练习。 Stackoverflow 不是为您编写代码的地方!提示:可能在for 循环之前测试image_1
    【解决方案4】:

    这里的其他建议也可以,但我会这样做:

    首先将图像排列在关联数组中,其中键是图像名称,值是图像链接,然后通过 foreach 循环进行迭代。

    除非绝对必要,否则我通常尽量不回显 HTML。

    <?php
    $array = [
        "image_1" => "image_link_1",
        "image_2" => "image_link_2",
        "image_3" => "image_link_3",
        "image_4" => "image_link_4"
    ];
    
    foreach ($array as $name => $link):
        $image = get_field($name); 
        if ($image): ?>
        <div class="col-md-4">
            <a href="<?=get_field($link)?>">
                <img src="<?= $image['url']; ?>" title="<?= $image['title']; ?>" alt="<?= $image['alt']; ?>" />        
            </a> 
            <?php else: ?>
                <img src="http://localhost/image.png">
            <?php endif; ?>
        </div>
    <?php endforeach; ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 2017-01-21
      • 2021-06-05
      • 2013-07-12
      相关资源
      最近更新 更多