如果字段不为空,则PHP Foreach循环

时间:2015-12-11 19:31:21

标签: php wordpress advanced-custom-fields

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

#PricingBox1000

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

<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 个答案:

答案 0 :(得分:3)

如果您知道只有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>';
   }
}

答案 1 :(得分:1)

foreach用于迭代数组,例如

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

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

答案 2 :(得分:0)

对于你发布的实现,你最好使用普通的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/

答案 3 :(得分:0)

在你的情况下,循环更好,因为循环值中的变化是数字。所以解决方案就像:

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函数范围来获取所需的数字。

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

答案 4 :(得分:0)

你可能想写的是那里的一个循环。 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循环不同,在每次迭代之前测试一个条件。在上面的示例代码中,我们将计数器变量初始化为零。在循环内部,我们在每次迭代时将计数器变量增加1,并且在条件中,我们指定为了使完整表达式为真,计数器必须小于5.