【发布时间】:2020-05-01 15:45:45
【问题描述】:
我一直在尝试解决这个问题,但有点困难。问题是,我正在尝试将下表中的数据按照它们相关的顺序嵌套到一个数组中。
+-----+------+------------+
| uid | name | supermember|
+-----+------+------------+
| 1 | A | 0 |
| 2 | B | 1 |
| 3 | C | 1 |
| 4 | D | 2 |
| 5 | E | 3 |
| 7 | G | 3 |
| 9 | H | 4 |
| 10 | I | 4 |
| 11 | J | 7 |
+-----+------+------------+
这是我所做的:
public function getDataAsBinaryTree($id)
{
$this->db->where('uid', $id);
$query = $this->db->get('binary_tbl');
$result = [];
if ($query->num_rows() > 0) {
foreach ($query->result() as $k) {
$result[$k->name] = $this->tolevels($k->uid);
}
} else {
$result = NULL;
}
return $result;
}
private function tolevels($id)
{
$this->db->where('supermember', $id);
$query = $this->db->get('binary_tbl');
$output = [];
$count = $query->num_rows();
if ($query->num_rows() > 0) {
foreach ($query->result() as $key) {
$output[$key->name] = (($count > 1) ? $this->tolevel($key->uid) : $this->tolevel($key->uid));
}
}
return $output;
}
预期输出
array(
'A' => array(
'B' => array(
'D' => array(
'H' => 'H',
'I' => 'I'
)
),
'C' => array(
'E' => null,
'G' => array(
'J' => 'J'
)
)
)
);
我希望从这些方法返回的数据位于键值对中,但是当我在 getDataAsBinaryTree(1) 方法上进行 var_dump 时,它反而返回了一个只有键的数组。我认为问题出在递归,但我只是不知道如何解决它。
结果
array (size=1)
'A' =>
array (size=2)
'B' =>
array (size=1)
'D' =>
array (size=2)
...
'C' =>
array (size=2)
'E' =>
array (size=0)
...
'G' =>
array (size=1)
...
【问题讨论】:
-
旁注:如果这个层次结构可以有两个以上的孩子,不要将方法命名为
getDataAsBinaryTree。 -
一次获取所有数据,然后创建数组以将 DB 调用的往返次数减少到 1。
-
@vivek_23 你介意给我样品吗?
-
这个问题和this one有什么不同?
-
键值对是什么意思? (您已经以分层方式检索数据)您可以发布示例预期输出吗?
标签: php sql codeigniter recursion