【问题标题】:Iterating through foreach loop - group sorting effiiceny遍历 foreach 循环 - 组排序效率
【发布时间】:2015-10-13 18:51:30
【问题描述】:

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

我有一个这样的数组

$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”等组合在一起

【问题讨论】:

  • 欢迎来到 SO。为什么所有这些 在每一行?您是否删除了一些 HTML?
  • 谢谢小伙子。是的。这只是为了便于阅读,因为我删除了很多 html。

标签: php arrays performance sorting loops


【解决方案1】:

你可以摆脱外部 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; ?>

【讨论】:

  • 我明白你在说什么,但我这样做的原因是我可以将 $myarray 中的所有 'value1' 匹配项组合在一起,然后将所有 'value2' 值等组合在一起。
  • 啊,我明白了。我更新了我的答案,可能会帮助您提高性能。
【解决方案2】:

使用in_array

从这里参考in_array

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

【讨论】:

    【解决方案3】:

    使用in_array函数

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

    例如:

     in_array($value, $myarray )
    

    【讨论】:

    • 请解释你的答案并举一个例子让读者知道你在说什么。
    猜你喜欢
    • 2013-12-16
    • 1970-01-01
    • 2021-12-17
    • 2010-10-24
    • 2018-07-17
    • 2021-10-11
    • 2019-11-14
    • 2017-03-22
    相关资源
    最近更新 更多