如何遍历多级 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]
]
这意味着,我可以有多个级别的评论 -> 一条评论一条评论一条评论。
如果我想删除一条评论,我会从视图中获取 CommentID 的完整链...父评论 ID、子父评论、子子评论等。
我现在如何取消设置此特定评论。
像这样:
假设我得到以下内容:1;2;3 其中 1 是父项的 CommentID,2 是父项的子项的 CommentID,3 是子项的 CommentID。
这对我来说是 PHP 中的一个变量。
我现在想取消设置 3..
理想情况下,我会写,
unset($object->{1}->{2}->{3});
它会起作用。
但是,我不能假设级别数。所以我必须以某种方式遍历评论 ID 并找出一种方法。
没有您实际拥有的示例,我假设您有一组评论,并且每个评论的内部可能是 comments
字段中的更多评论的数组。
如果是这种情况,您将按照
的方式进行操作
unset($object->comments[1]->comments[2]->comments[3]);
这将取消设置对象中第一条评论的第二条评论的第三条评论。
如果这不是您要找的答案,请举一个实际例子。
Sudo Recursion example
function unsetLowestComment($comment) {
$commentsLength = count($comment->comments);
if($commentsLength > 0) {
unsetLowestComment($comment->comments[$commentsLength -1]);
} else {
unset($comment);
}
}
unsetLowestComment($commentInQuestion);
我有一个对象,其形式为:
CommentID: [
"UserID": UserID,
"Status": "active/deleted",
"DateTime": "DateTime",
"Comment": "CommentText",
"Likes": [
UserID: DateTime of Like,
UserID: DateTime of Like...
],
"Comments": [same as parent]
]
这意味着,我可以有多个级别的评论 -> 一条评论一条评论一条评论。
如果我想删除一条评论,我会从视图中获取 CommentID 的完整链...父评论 ID、子父评论、子子评论等。
我现在如何取消设置此特定评论。
像这样:
假设我得到以下内容:1;2;3 其中 1 是父项的 CommentID,2 是父项的子项的 CommentID,3 是子项的 CommentID。
这对我来说是 PHP 中的一个变量。
我现在想取消设置 3..
理想情况下,我会写,
unset($object->{1}->{2}->{3});
它会起作用。
但是,我不能假设级别数。所以我必须以某种方式遍历评论 ID 并找出一种方法。
没有您实际拥有的示例,我假设您有一组评论,并且每个评论的内部可能是 comments
字段中的更多评论的数组。
如果是这种情况,您将按照
的方式进行操作unset($object->comments[1]->comments[2]->comments[3]);
这将取消设置对象中第一条评论的第二条评论的第三条评论。
如果这不是您要找的答案,请举一个实际例子。
Sudo Recursion example
function unsetLowestComment($comment) {
$commentsLength = count($comment->comments);
if($commentsLength > 0) {
unsetLowestComment($comment->comments[$commentsLength -1]);
} else {
unset($comment);
}
}
unsetLowestComment($commentInQuestion);