php - 通过 comment_id == parent_id 对多维数组进行排序
问题描述
我有多维数组
Array
(
[0] => Array
(
[comment_id] => 32
[article_id] => 5
[parent_id] => 31
[user_id] => 22
[content] => dolor sit amet consectetur adipisicing
[created_at] => 02-04-2021
)
[1] => Array
(
[comment_id] => 30
[article_id] => 5
[parent_id] => 29
[user_id] => 22
[content] => Lorem ipsum dolor sit amet.
[created_at] => 01-04-2021
)
[2] => Array
(
[comment_id] => 31
[article_id] => 5
[parent_id] => 29
[user_id] => 22
[content] => Sit amet consectetur adipisicing
[created_at] => 02-04-2021
)
[3] => Array
(
[comment_id] => 29
[article_id] => 5
[parent_id] => 0
[user_id] => 22
[content] => dolor sit amet consectetur adipisicing
[created_at] => 01-04-2021
)
)
我试着得到
Array
(
[comment_id] => 29
[article_id] => 5
[parent_id] => 0
[user_id] => 22
[content] => dolor sit amet consectetur adipisicing
[created_at] => 01-04-2021
[comments] => Array
(
[0] => Array
(
[comment_id] => 31
[article_id] => 5
[parent_id] => 29
[user_id] => 22
[content] => Sit amet consectetur adipisicing
[created_at] => 02-04-2021
[comments] => Array
(
[comment_id] => 32
[article_id] => 5
[parent_id] => 31
[user_id] => 22
[content] => dolor sit amet consectetur adipisicing
[created_at] => 02-04-2021
)
)
[1] => Array
(
[comment_id] => 30
[article_id] => 5
[parent_id] => 29
[user_id] => 22
[content] => Lorem ipsum dolor sit amet.
[created_at] => 01-04-2021
)
)
)
基于 [parent_id] == [comment_id]
我确实尝试了一些 if 语句的 foreach 循环,但我不知道多维数组将来会有多深。和匿名 fc 还不是我的朋友 :( 任何人都可以给我一个提示如何解决这个问题。
非常感谢
解决方案
您可以分两步执行此操作:
- 按评论 ID 索引您的条目
- 循环遍历每个条目并
comments
用当前条目填充父条目,同时确保记住哪个是树的根。
代码:
$arr_by_comment_id = array_column($arr, null, 'comment_id');
$root_entry = null;
foreach ($arr_by_comment_id as &$entry) {
if ($entry['parent_id'] === 0) {
$root_entry =& $entry;
} elseif (array_key_exists($entry['parent_id'], $arr_by_comment_id)) {
$arr_by_comment_id[$entry['parent_id']]['comments'][] = $entry;
}
}
unset($entry); // For safety (since references were used)
print_r($root_entry);
推荐阅读
- spring-boot - 如何在沙发库中使用 LIKE n1ql 查询?
- java - java对象未编译
- python - 将参数值打印到堆栈跟踪中的函数
- node.js - 条纹:未知参数([object Object])。在已连接帐户上创建新计划时出错
- git - 可以在 GitHub 中进行 git pull 吗?
- java - 更新 zip 存档中的文件
- java - 如何使@SpringBootTest 使用可配置的属性
- python - Python Pandas条件计算逐行
- android-studio - 在单元测试中处理 protobuf 类时出现 NoSuchMethod 错误
- android - 在我的 Android 设备上收集热数据的最佳方式是什么?