我的项目中有一个循环运行我不满意,并想知道是否有更有效的方法来实现这个目标?
我有一个像这样的数组
$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'等等
答案 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 )