PHP 如果字段不为空则进行 Foreach 循环
PHP Foreach loop if field is not empty
我正在努力掌握 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 returns 图像 url 而 the_field returns 图像。
<?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++;
}
?>
如果您知道只有 5 个项目,那么您只需使用 for
或 while
循环。 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>';
}
}
foreach
用于遍历数组,例如
foreach (array_expression as $value) {
// current array element
}
您使用的语法不适用于 foreach(请参阅示例以了解其工作原理)。
对于您发布的实现,最好使用普通的 for 循环。
for ($i = 1; $i <= 5; $i++) {
// print <li>
}
要使用 foreach 循环,您需要迭代一个数组。 get_field("name")
不是 return 数组,但是您可以将 foreach 与 get_fields()
一起使用
$fields = get_fields();
if( $fields )
{
foreach( $fields as $field_name => $value )
{
// Output values here
}
}
详情在这里:http://www.advancedcustomfields.com/resources/get_fields/
在你的情况下,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>');
}
您可能想在上面写一个 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 循环不同,它在每次迭代之前测试一个条件。在上面的示例代码中,我们将计数器变量初始化为零。在循环内部,我们在每次迭代时将计数器变量增加 1,并且在条件中,我们指定为了使完整表达式为真,计数器必须小于 5。
我正在努力掌握 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 returns 图像 url 而 the_field returns 图像。
<?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++;
}
?>
如果您知道只有 5 个项目,那么您只需使用 for
或 while
循环。 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>';
}
}
foreach
用于遍历数组,例如
foreach (array_expression as $value) {
// current array element
}
您使用的语法不适用于 foreach(请参阅示例以了解其工作原理)。
对于您发布的实现,最好使用普通的 for 循环。
for ($i = 1; $i <= 5; $i++) {
// print <li>
}
要使用 foreach 循环,您需要迭代一个数组。 get_field("name")
不是 return 数组,但是您可以将 foreach 与 get_fields()
$fields = get_fields();
if( $fields )
{
foreach( $fields as $field_name => $value )
{
// Output values here
}
}
详情在这里:http://www.advancedcustomfields.com/resources/get_fields/
在你的情况下,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>');
}
您可能想在上面写一个 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 循环不同,它在每次迭代之前测试一个条件。在上面的示例代码中,我们将计数器变量初始化为零。在循环内部,我们在每次迭代时将计数器变量增加 1,并且在条件中,我们指定为了使完整表达式为真,计数器必须小于 5。