我用这样的数据创建了一个php和mysql数据库
======================================
| id | username | ref_id |
| 1 | user1 | 0 |
| 2 | user2 | 1 |
| 3 | user3 | 1 |
| 4 | user4 | 2 |
| 5 | user5 | 3 |
| 6 | user6 | 4 |
| 7 | user7 | 5 |
=====================================
我想显示每个用户在其ref\u id下的多级引用。
结果应该是这样的
Array
(
[level_1] => Array
(
[level] => 1
[users] => Array
(
[2] => Array
(
[id] => 2
[username] => user2
[ref_id] => 1
)
[3] => Array
(
[id] => 3
[username] => user3
[ref_id] => 1
)
)
)
[level_2] => Array
(
[level] => 2
[users] => Array
(
[4] => Array
(
[id] => 4
[username] => user4
[ref_id] => 2
)
[5] => Array
(
[id] => 5
[username] => user5
[ref_id] => 3
)
)
)
[level_3] => Array
(
[level] => 3
[users] => Array
(
[6] => Array
(
[id] => 6
[username] => user6
[ref_id] => 4
)
[7] => Array
(
[id] => 7
[username] => user7
[ref_id] => 5
)
)
)
)
好的,这是我试过的,但是级别3重复的像级别2
$stmt = $conn->prepare("SELECT DISTINCT id,username,ref_id FROM users WHERE id = :uid");
$stmt->bindValue(':uid', $userid);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$refdetails = $stmt->fetchAll();
function getRefs($parent_id = 1, $deep) {
global $conn;
$stmt = $conn->prepare("SELECT DISTINCT id,username,ref_id FROM users WHERE ref_id = :uid");
$stmt->bindValue(':uid', $parent_id);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
while ($row = $stmt->fetch()){
$ref_user[$row['id']]=array(
"id"=>$row['id'],
"username"=>$row['username'],
"ref_id"=>$row['ref_id']
);
}
$level = 1;
$arr_refs = $arr_user = array();
for ($i=1; $i <= $deep ; $i++) {
if($i==1){
$arr_refs['level_'.$level] = array(
"level"=>$level,
"users"=>$ref_user
);
}else{
foreach ($ref_user as $arr){
$arr_id = $arr['id'];
$stmts = $conn->prepare("SELECT DISTINCT id,username,ref_id FROM users WHERE ref_id = :uid");
$stmts->bindValue(':uid', $arr_id);
$stmts->execute();
$stmts->setFetchMode(PDO::FETCH_ASSOC);
while ($row = $stmts->fetch()){
$arr_user[$row['id']]=$row;
}
}
$arr_refs['level_'.$level] = array(
"level"=>$level,
"users"=>$arr_user
);
}
$level++;
}
return $arr_refs;
}
像这样调用这个函数
echo '<pre>';
print_r(getRefs('1','3'));
echo '</pre>';
级别3的结果不是真的,因为它是从级别2重复的
[level_3] => Array
(
[level] => 3
[users] => Array
(
[2] => Array
(
[id] => 4
[username] => user4
[ref_id] => 2
)
[3] => Array
(
[id] => 5
[username] => user5
[ref_id] => 3
)
[4] => Array
(
[id] => 4
[username] => user4
[ref_id] => 2
)
[5] => Array
(
[id] => 5
[username] => user5
[ref_id] => 3
)
)
)
有人能帮我吗?