Я пытался решить это некоторое время, но это было немного сложно. дело в том, что я пытаюсь вложить данные из таблицы, приведенной ниже, в массив в том порядке, в котором они связаны.
+-----+------+------------+
| 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'
)
)
)
);
Я хочу, чтобы возвращаемые данные из этих методов были в паре ключ-значение, но вместо этого он возвращал массив только с ключами, когда я var_dump в методе getDataAsBinaryTree(1)
, Я думаю, что проблема в рекурсии, но я просто не знаю, как ее обойти.
РЕЗУЛЬТАТ
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)
...