Php 通过foreach函数进行过滤
我在这里发疯,我简直无法让它工作 我需要执行foreach循环以获取网站中的所有作者,然后我需要筛选出0篇已发表文章的作者,然后将文章的作者回送到UL LI中,并为数组中的最后一位作者添加一个特殊的Php 通过foreach函数进行过滤,php,wordpress,foreach,Php,Wordpress,Foreach,我在这里发疯,我简直无法让它工作 我需要执行foreach循环以获取网站中的所有作者,然后我需要筛选出0篇已发表文章的作者,然后将文章的作者回送到UL LI中,并为数组中的最后一位作者添加一个特殊的标记: 目前我的代码有两个函数,一个是对至少有一篇文章的所有作者进行预过滤,然后在第二个函数中计算过滤数组中剩余的作者数,然后给数组中的最后一个条目一个特殊的li标记。迄今为止的代码: /********************* Echo Filtered List ********
/*********************
Echo Filtered List
*********************/
function filtered_list() {
$authors = get_users('orderby=nicename');
$all_authors = array();
if ( count_user_posts( $author->id ) >= 1 ) {
return true;
}
}
function contributors() {
$i = 0;
filtered_list();
$len = count($all_authors);
foreach ($all_authors as $author ) {
if ( count_user_posts( $author->id ) >= 1 ) {
if ($i == $len - 1) {
echo "<li class='author-last clearfix'>";}
else {
echo "<li class='author clearfix'>";}
$i++;
/*********************
回声过滤列表
*********************/
函数筛选的_列表(){
$authors=get_users('orderby=nicename');
$all_authors=array();
if(count\u user\u posts($author->id)>=1){
返回true;
}
}
函数贡献者(){
$i=0;
过滤列表();
$len=计数(所有作者);
foreach($author为所有作者){
if(count\u user\u posts($author->id)>=1){
如果($i==$len-1){
echo“”;}
否则{
echo“ ”;}
$i++;
如果你通读你的代码,你可能会明白为什么它不起作用
第一:范围
阅读中的变量作用域。基本上,函数中声明的变量仅在该函数中可用,因此$all_authors
在contributors()中为空,因为它从未初始化过
filtered_list
函数应该返回一个经过筛选的作者列表,因此您应该循环,尽管$authors
,并将作者添加到$all_authors
如果,并且仅当她有一篇或多篇文章时。循环后,返回数组
现在,您可以通过将fist函数的返回值设置为贡献者
中的$all_authors(或者更好的方法是,只需调用他们$authors
)
现在,您已经准备好遍历作者列表并查找他们的文章。为此,您需要两个循环。一个用于作者,另一个用于文章
foreach author in authors
foreach post in author->posts
if post is last post
print special stuff
else
print normal stuff
endif
endforeach
endforeach
希望这对你有所帮助,并且你会从中学到一些东西。重点是:逐行阅读你的代码,并向自己解释它的作用。你到底想做什么?你的问题似乎不清楚。这是一个建议,如果听起来有点夸张,我很抱歉。范围并不是唯一错误的地方。这就是我提到它的原因。嗨,是的没关系,我很感谢你的帮助。我确实理解变量作用域,但我已经做了这么多小时了,我试着移动代码,把它弄得一团糟。以前它工作得很好,只是有一件事——我过滤了foreach循环,之后我无法让它找到循环中的最后一个条目来给出它一个特殊的html标记,这是tropuble真正开始的时候。几乎!但是多亏了你的代码,我终于到达了那里!非常感谢。你设置了在一次之后返回数组}太多了,所以我修复了它,我不得不稍微调整第二个函数,使其完全按照我的需要工作。再次感谢:)很高兴提供帮助。请随意将其标记为已解决(复选标记)。