代码很明了 直接上代码了
<?php
//模拟文章列表
$arr = [
[
'id'=> 1,
'name' =>'文章1',
'com_id' => 1
],
];
//模拟多级评论
$com = [
[
'id' => 1,
'com_id'=> 1,
'name' =>'回复1',
'pid' => 0, //最先评论
],
[
'id'=> 2,
'com_id'=> 1,
'name' =>'回复2',
'pid' => 1 //指向上级评论id
],
[
'id'=> 3,
'com_id'=> 1,
'name' =>'回复3',
'pid' => 2, //指向上级评论id
]
];
//从pid依次判断
function getArr($arr,$pid=0){
$child = find_child($arr,$pid); //找当前元素的子集
foreach($child as $k => $v){
$tree = getArr($arr,$v['id']);
if(null != $tree){
$child[$k]['son']= $tree;
}
}
return $child;
}
//找当前子集的方法
function find_son(&$arr,$id){
$child = [];
foreach($arr as $k => $v){
if($v['pid'] == $id){
$child[] = $v;
}
}
return $child;
}
$com = getArr($com);
//双层循环遍历两数组
foreach($arr as $key => &$val){
foreach ($com as $k => $v){
if($v['com_id'] == $val['com_id']){
$val['son'][] = $v;
}
}
}
echo '<pre>';
var_dump($arr);
效果