简体   繁体   中英

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

I have an object that is in the form:

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

This means, I could have multiple levels of comments -> A comment on a comment on a comment.

If I want to delete a comment, I get from the view the full chain of CommentIDs... parent commentID, sub-parent, sub-sub.. etc..

How can I now unset this particular comment.

Something like this:

Imagine I get the following: 1;2;3 where 1 is CommentID of parent, 2 is CommentID of child of parent and 3 is CommentID of child of child.

This comes to me as a variable in PHP.

I would like now to unset 3..

ideally, I'd write,

unset($object->{1}->{2}->{3}); and it will work.

But, i can't assume the number of levels. So I have to somehow loop through the comment ID's and figure out a way.

Without an example of what you actually have, I'm assuming you have an array of comments, and inside of each comment could be an array of more comments inside the comments field.

If this is the case you would be doing something along the lines of

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

This would unset the third comment, of the second comment of the first comment in your object.

If this is not the answer you are looking for, please give an actually example.

Sudo Recursion example

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

unsetLowestComment($commentInQuestion);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM