迭代foreach循环 - 组排序效率

时间:2015-07-23 12:46:27

标签: php arrays performance sorting loops

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

我有一个像这样的数组

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

然后我想要浏览另一个对象($ sponsors)并且只打印出具有与$ 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'等等

3 个答案:

答案 0 :(得分:1)

你可以摆脱外部的foreach循环

<?php foreach ($sponsors as $post) : setup_postdata( $post );?>

   <?php if(in_array($post['someValue'], $myarray)): ?>
       //Do the work

   <?php endif; ?>

<?php endforeach; ?>

<强>更新

鉴于$sponsers是一个posts的数组,您可以根据本地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; ?>

答案 1 :(得分:0)

使用in_array

  从这里

ref in_array

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

答案 2 :(得分:0)

使用in_array功能

它需要三个参数,但一个是可选的

例如:

 in_array($value, $myarray )