我有一个循环在我的项目中运行,我不满意,想知道是否有一个更有效的方法来实现这一点?
我有一个这样的数组
$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; ?>
给定$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; ?>
使用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 )