Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过foreach函数进行过滤_Php_Wordpress_Foreach - Fatal编程技术网

Php 通过foreach函数进行过滤

Php 通过foreach函数进行过滤,php,wordpress,foreach,Php,Wordpress,Foreach,我在这里发疯,我简直无法让它工作 我需要执行foreach循环以获取网站中的所有作者,然后我需要筛选出0篇已发表文章的作者,然后将文章的作者回送到UL LI中,并为数组中的最后一位作者添加一个特殊的标记: 目前我的代码有两个函数,一个是对至少有一篇文章的所有作者进行预过滤,然后在第二个函数中计算过滤数组中剩余的作者数,然后给数组中的最后一个条目一个特殊的li标记。迄今为止的代码: /********************* Echo Filtered List ********

我在这里发疯,我简直无法让它工作

我需要执行foreach循环以获取网站中的所有作者,然后我需要筛选出0篇已发表文章的作者,然后将文章的作者回送到UL LI中,并为数组中的最后一位作者添加一个特殊的
  • 标记:

    目前我的代码有两个函数,一个是对至少有一篇文章的所有作者进行预过滤,然后在第二个函数中计算过滤数组中剩余的作者数,然后给数组中的最后一个条目一个特殊的li标记。迄今为止的代码:

    /*********************
        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真正开始的时候。几乎!但是多亏了你的代码,我终于到达了那里!非常感谢。你设置了在一次之后返回数组}太多了,所以我修复了它,我不得不稍微调整第二个函数,使其完全按照我的需要工作。再次感谢:)很高兴提供帮助。请随意将其标记为已解决(复选标记)。