大家好,我目前正在开发一个foreach循环,它从Wordpress的后端从一个库中提取图像。该画廊工作正常,正如预期的那样,我想防止出现重复的照片。
<?php if () $query->have_posts() ):
$thumbs = [];
?>
<?php
foreach( $query->posts as $gallery ):
$images = get_field('gallery_images', $gallery->ID);
if( $images ):
foreach( $images as $image ):
$cropped_img = aq_resize( $image['url'], 1024, 576, true, true, true );
$img_id[] = $image['ID'];
$thumbs[] = $cropped_img;
?>
与问题无关的HTML
<?php endforeach; endif; endforeach; ?>
<?php foreach($thumbs as $thumbnail): ?>
<div class="gallery__thumb"><img src="<?= $thumbnail; ?>"></div>
<?php endforeach; ?>
这基本上是我试图解决的问题。我想过为图像ID添加两个变量,这样它们就不会在第一个代码块中重复出来。因此,首先if / foreach状态如下:
<?php if( $images ):
foreach( $images as $image ):
$cropped_img = aq_resize( $image['url'], 1024, 576, true, true, true );
$img_id[] = $image['ID'];
$do_not_duplicate[] = $image['ID'];
$thumbs[] = $cropped_img;
?>
接下来是缩略图的跟随foreach
<?php foreach($thumbs as $thumbnail): ?>
<?php foreach($img_id as $img): ?>
<?php if ($img == $do_not_duplicate) : ?>
//do nothing
<?php else : ?>
<div class="gallery__thumb"><img src="<?= $thumbnail; ?>"></div>
<?php endif; ?>
<?php endforeach; endforeach; ?>
我遇到的问题是我得到了22张图片,因为有22张图片被拉出(1张重复)。基本上我试图完成22张没有重复的图像。
非常感谢任何见解,谢谢你。
答案 0 :(得分:0)
只需编辑您的PHP代码:
$thumbs[$image['ID']] = $cropped_img;
它将是一个关联数组,其中图像以id作为键存储,因此如果将双重图像推送到数组,它将覆盖旧数据
答案 1 :(得分:0)
根据您的代码,它应该是:
<?php if( $images ):
foreach( $images as $image ):
$cropped_img = aq_resize( $image['url'], 1024, 576, true, true, true );
$img_id[] = $image['ID'];
$thumbs['url'][] = $cropped_img;
$thumbs['id'][] = $image['ID']
?>
然后
<?php foreach($thumbs as $thumbnail): ?>
<?php if (!in_array($thumbnail['do_not_duplicate'], $img_id)): ?>
<div class="gallery__thumb"><img src="<?= $thumbnail['url']; ?>"></div>
<?php endif; ?>
<?php endforeach; ?>
答案 2 :(得分:0)
您可以在添加之前检查图片ID是否已存在于$ img_id数组中。
我修改了下面的代码
<?php if () $query->have_posts() ):
$thumbs = [];
?>
<?php
foreach( $query->posts as $gallery ):
$images = get_field('gallery_images', $gallery->ID);
if( $images ):
// Initialize $img_id[]
$img_id = [];
foreach( $images as $image ):
// Only add to the $img_id array and $thumbs array if
// $image['ID'] is not in $img_id array
if( ! in_array($image['ID'], $img_id)):
$cropped_img = aq_resize( $image['url'], 1024, 576, true, true, true );
$img_id[] = $image['ID'];
$thumbs[] = $cropped_img;
?>
希望这有帮助!
根据$ image ['ID']的值,您可能需要使用in_array()的第三个参数来进行严格检查。