【问题标题】:PHP Foreach loop if field is not empty如果字段不为空,则 PHP Foreach 循环
【发布时间】:2019-12-22 11:36:51
【问题描述】:

我正在努力掌握 foreach 循环的艺术;我有以下与 WordPress 和高级自定义字段插件一起使用的代码。我想把它变成一个foreach循环。

<li data-thumb="<?php the_field('image_1'); ?>"> 
    <img src="<?php the_field('image_1'); ?>" />
</li>
<li data-thumb="<?php the_field('image_2'); ?>"> 
    <img src="<?php the_field('image_2'); ?>" />
</li>
<li data-thumb="<?php the_field('image_3'); ?>"> 
    <img src="<?php the_field('image_3'); ?>" />
</li>
<li data-thumb="<?php the_field('image_4'); ?>"> 
    <img src="<?php the_field('image_4'); ?>" />
</li>
<li data-thumb="<?php the_field('image_5'); ?>"> 
    <img src="<?php the_field('image_5'); ?>" />
</li> 

我尝试编写下面的代码,但它不起作用,我不知道如何将循环限制为 5(图像)。请注意,get_field 返回图片 url,而 the_field 返回图片。

<?php                       

    $i=1;
    foreach (!empty (get_field('property_image.$i.')) ) {

    print (' <li data-thumb="<?php the_field('property_image'.$i.'); ?>"> 
             <img src="<?php the_field('property_image'.$i.'); ?> "> 
             </li> ');

    $i++; 

        }

?>

【问题讨论】:

    标签: php wordpress advanced-custom-fields


    【解决方案1】:

    如果您知道只有 5 个项目,那么您只需使用 forwhile 循环。 foreach 是一个循环,用于循环遍历您没有的元素数组。

    请考虑这个循环:

    for($i = 1; $i <= 5; $i++) {
       if( !empty(get_field('property_image'.$i)) ) {
         echo '<li data-thumb="' . the_field('image_' . $i) . '">';
         echo '<img src="' . the_field('image_' . $i) '" />';
         echo '</li>';
       }
    }
    

    【讨论】:

      【解决方案2】:

      foreach 用于遍历数组,例如

      foreach (array_expression as $value) {
           // current array element
      }
      

      您使用的语法不适用于foreach(请参阅示例以了解其工作原理)。

      【讨论】:

        【解决方案3】:

        对于您发布的实现,您最好使用普通的 for 循环。

        for ($i = 1; $i <= 5; $i++) {
            // print <li>
        }
        

        要使用 foreach 循环,您需要遍历一个数组。 get_field("name") 不返回数组,但是您可以将 foreach 与 get_fields() 一起使用

        $fields = get_fields();
        
        if( $fields )
        {
            foreach( $fields as $field_name => $value )
            {
                // Output values here
            }
        }
        

        详情请看:http://www.advancedcustomfields.com/resources/get_fields/

        【讨论】:

          【解决方案4】:

          在您的情况下,for 循环更好,因为循环值的更改是数字。所以解决方案将是:

          for ($i = 1; $i<=5; $i++) {
              $src = the_field('image_'.$i);
              printf('<li data-thumb="%s">', $src);
              printf('<img src="%s" />', $src);
              print('</li>');
          }
          

          如果您仍想使用 foreach 循环,那么您可以使用内置的 php 函数 range 来获取所需的数字。

          foreach (range(1, 5) as $i) {
              $src = the_field('image_'.$i);
              printf('<li data-thumb="%s">', $src);
              printf('<img src="%s" />', $src);
              print('</li>');
          }
          

          【讨论】:

            【解决方案5】:

            你可能想写的是一个while循环。 Foreach 循环不会在循环之前测试条件。相反,foreach 循环采用一个数组并迭代其中的所有值。它还可以遍历关联数组。

            <?php
            $users = array(
                'user_mango' => 'John Doe',
                'user_2' => 'Jacob Doe',
                'user_potato' => 'Jane Doe'
            );
            
            foreach ($users as $user_id => $name) {
                echo $user_id, ' - ', $name, '<br>';
            }
            

            应该输出

            user_mango - John Doe
            user_2 - Jacob Doe
            user_potato - Jane Doe
            

            我不是 wordpress 开发者,但如果你想以你开始时的风格编写这段代码,这里是:

            <?php
            $i = 0;
            while (!empty(get_field('property_image.$i.')) && $i < 5) {
                echo 'YOUR TEMPLATE CODE';
                $i++;
            }
            

            while 循环与 foreach 循环不同,它在每次迭代之前测试一个条件。在上面的示例代码中,我们将计数器变量初始化为零。在循环内部,我们在每次迭代时将 counter 变量加一,并且在条件中,我们指定为了使完整表达式为真,计数器必须小于 5。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-07-17
              • 2013-10-02
              • 1970-01-01
              • 2015-09-18
              • 2016-10-12
              相关资源
              最近更新 更多