遍历foreach循环-组排序效率


Iterating through foreach loop - group sorting effiiceny

我有一个循环在我的项目中运行,我不满意,想知道是否有一个更有效的方法来实现这一点?

我有一个这样的数组

$myarray = ["value1", "value2", "value3"];

然后我想遍历另一个对象($赞助商),并且只打印出具有与$myarray[]中的值匹配的字段的值。像这样:

<?php foreach ($myarray as $value): ?>
  <?php foreach ($sponsors as $post) : setup_postdata( $post );?>
       <?php if($post['someValue'] == $value): ?>
           //Do the work
       <?php endif; ?>
  <?php endforeach; ?>
<?php endforeach; ?>

这工作得很好,但它可能意味着50-60个循环只是为了抓取和打印一些标记。有更好的方法吗?

编辑说明:(基于初始回复)$myarray的顺序很重要,这允许我将'value1'组在一起,然后'value2'等

可以去掉外部foreach循环

<?php foreach ($sponsors as $post) : setup_postdata( $post );?>
   <?php if(in_array($post['someValue'], $myarray)): ?>
       //Do the work
   <?php endif; ?>
<?php endforeach; ?>

给定$sponsersposts的数组,您可以通过本地array_filter()函数根据某些值过滤帖子来提高性能,因此foreach迭代的帖子较少。

在此之后,不需要if语句,这也将提高性能。
<?php foreach ($myarray as $value): ?>
<?php $filteredPosts = array_filter($sponsors, function($post) use ($value) { return $post['someValue'] == $value; }); ?>
  <?php foreach ($filteredPosts as $post) : setup_postdata( $post );?>
      // do something
  <?php endforeach; ?>
<?php endforeach; ?>

使用in_array

ref in_array from here

 <?php 
   foreach ($sponsors as $post) {
      setup_postdata( $post );
      if(in_array($post['someValue'],$myarray){
             //Do the work
      }
     }
?>

使用in_array函数

有三个参数,其中一个是可选的

例如:

 in_array($value, $myarray )