如何遍历多级php对象并动态取消设置最深的节点

时间:2015-06-14 04:46:45

标签: php object unset

我有一个形式为的对象:

CommentID: [
  "UserID": UserID, 
  "Status": "active/deleted", 
  "DateTime": "DateTime", 
  "Comment": "CommentText",  
  "Likes": [
    UserID: DateTime of Like, 
    UserID: DateTime of Like...
  ], 
  "Comments": [same as parent]
]

这意味着,我可以有多个级别的评论 - >对评论的评论发表评论。

如果我想删除评论,我会从视图中获得评论ID的完整链......父评论ID,子母,子子......等等。

我现在如何取消这一特定评论。

这样的事情:

想象一下,我得到以下内容:1; 2; 3其中1是父母的CommentID,2是父母的孩子的CommentID,3是孩子的孩子的CommentID。

这是我在PHP中的一个变量。

我现在想取消3 ..

理想情况下,我会写,

unset($object->{1}->{2}->{3});它会起作用。

但是,我不能假设等级的数量。所以我必须以某种方式遍历评论ID并找出方法。

1 个答案:

答案 0 :(得分:1)

如果没有您实际拥有的示例,我假设您有一系列评论,并且每条评论内部可能是comments字段内的更多评论数组。

如果是这种情况,你会按照

的方式做一些事情

unset($object->comments[1]->comments[2]->comments[3]);

这将取消您对象中第一条评论的第二条评论的第三条评论。

如果这不是您正在寻找的答案,请举一个实际的例子。

  

Sudo 递归示例

function unsetLowestComment($comment) {
  $commentsLength = count($comment->comments);
  if($commentsLength > 0) {
    unsetLowestComment($comment->comments[$commentsLength -1]);
  } else {
    unset($comment);
  }
}

unsetLowestComment($commentInQuestion);