防止foreach中的重复帖子

时间:2017-12-06 23:01:25

标签: php wordpress if-statement foreach

大家好,我目前正在开发一个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张没有重复的图像。

非常感谢任何见解,谢谢你。

3 个答案:

答案 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()的第三个参数来进行严格检查。

参考:http://php.net/manual/en/function.in-array.php