dongshenling6585 2019-08-15 06:48
浏览 281
已采纳

array_filter如何返回一个对象

I was following a tutorial and came across this,let's say I'm having an array of posts(objects) having two properties:

title of the post and the status (is it published or not).
and in my code I want to return those posts who are not published yet. I know there are various ways to do that but in the tutorial the code shown was like this

$posts = [
    new Post("My First Post",false),
    new Post("My Second Post",true),
    new Post("My Third Post",false),
    new Post("My Fourth Post",false),
    new Post("My Fifth Post",true),
    ];


$unpulishedPost = array_filter( $posts,function ($post){
    return !$post->published;
});

I can't get my head around how does return actually returns the entire post object when it should only returns an array of booleans shouldn't the code be like so

$unpulishedPost = array_filter( $posts,function ($post){
     if(!$post->published) 
     return $post;
});
  • 写回答

1条回答 默认 最新

  • dongliyan7318 2019-08-15 06:58
    关注
    class Post {
        public $title;
        public $isPublished;
    
        public function __construct($title, $isPublished) {
            $this->title = $title;
            $this->isPublished = $isPublished;
        }
    }
    
    $posts = [
        new Post("My First Post", false),
        new Post("My Second Post", true),
        new Post("My Third Post", false),
        new Post("My Fourth Post", false),
        new Post("My Fifth Post", true),
        ];
    
    
    $unpublishedPosts = array_filter($posts, function($post) {
        return !$post->isPublished;
    });
    
    var_dump($unpublishedPosts);
    

    This filter will return only the unpublished posts.

    array(3) {
        [0] =>
        class Post#1 (2) {
          public $title =>
          string(13) "My First Post"
          public $isPublished =>
          bool(false)
        }
        [2] =>
        class Post#3 (2) {
          public $title =>
          string(13) "My Third Post"
          public $isPublished =>
          bool(false)
        }
        [3] =>
        class Post#4 (2) {
          public $title =>
          string(14) "My Fourth Post"
          public $isPublished =>
          bool(false)
        }
      }
    

    Array_filter returns the argument of the filter callback, if the return value is true. Else it won't be pushed into the resulting array. In that way you can apply your own rules.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器