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


How can I traverse a multi level php object and unset the deepest node dynamically

我有一个对象,其形式为:

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 是父项的注释 ID,2 是父项的子项的注释

ID,3 是子项的子项的注释 ID。

这对我来说是PHP中的一个变量。

我现在想取消设置 3..

理想情况下,我会写,

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

但是,我不能假设级别的数量。所以我必须以某种方式循环浏览评论 ID 并找出一种方法。

如果没有您实际拥有的示例,我假设您有一个注释数组,并且每个注释的内部可能是comments字段中的更多注释数组。

如果是这种情况,您将执行以下操作:

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

这将取消设置对象中第一个注释的第二个注释的第三个注释。

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

须藤递归示例

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