如何使用 php 和 mysql 进行无限递归循环来构建特定的数组布局?我已经写出了我的表格、数组布局以及我完成这项工作的尝试。我花了过去几个小时来解决这个问题,但运气不佳。
我正在尝试基于我的数据库构建一个 php 数组,该数组在使用 json_encode
时构建特定布局
我的数据库表如下所示
TABLE `info` | TABLE `relations`
+--------+-----------+ +--------+-----------+
| id | name + | id | parent_id |
+--------+-----------+ +--------+-----------+
| 2p03Me | sue | | b5ET7N | 2p03Me |
| b5ET7N | john | | h7S4bk | b5ET7N |
| h7S4bk | bob | | iMz4d7 | 2p03Me |
| iMz4d7 | sam | | ixRpaH | iMz4d7 |
| ixRpaH | teddy | | k41BhX | ixRpaH |
| k41BhX | dan | +--------+-----------+
+--------+-----------+
生成的数组应如下所示:
Array
(
[0] => stdClass Object
(
[text] => sue
[nodes] => Array
(
[0] => stdClass Object
(
[text] => john
[nodes] => Array
(
[0] => stdClass Object
(
[text] => bob
)
)
)
[1] => stdClass Object
(
[text] => teddy
[nodes] => Array
(
[0] => stdClass Object
(
[text] => dan
)
)
)
)
)
)
我已经尝试过几次,但似乎无法让它发挥作用。我最近一次也是最后一次尝试是
$tree = category_tree($mysqli, $origSnippet);
function category_tree($mysqli, $catid, $tree = array()) {
?><pre><?php print_r($tree); ?></pre><?php
$sql = "SELECT * FROM `relations` INNER JOIN `info` ON `relations`.`id`=`info`.`id` WHERE `relations`.`parent_snippet_id`='$catid'";
$children = $mysqli->query($sql);
while($child = $children->fetch_assoc()) {
$tree[] = array('text' => "$child[name]/$child[id]");
echo "$child[name]/$child[snippet_id]<br/>";
category_tree($mysqli, $child['id'], $tree);
}
return $tree;
}
如果您能够提供任何帮助,我们将非常感激。
## 我的问题##
如何使用 php 和 mysql 进行无限递归循环来构建特定的数组布局?我已经写出了我的表格、数组布局以及我完成这项工作的尝试。我花了过去几个小时来解决这个问题,但运气不佳。
最佳答案
我通过执行以下操作解决了此问题:
$tree = array();
$node_id = 0;
$origSnippet = "2p03Me"; //THIS IS GOTTEN FROM A SEPERATE FUNCTION BUT WILL BE THE STARTING POINT OF THE LOOP
function hasChildNodes($mysqli, $snippetID) {
$sql = "SELECT * FROM `relations` INNER JOIN `info` ON `relations`.`id`=`info`.`id` WHERE `relations`.`parent_id`='$snippetID'";
return $mysqli->query($sql)->num_rows;
}
function buildTree($mysqli, $snippetID, $node_id, &$tree) {
$sql = "SELECT * FROM `relations` INNER JOIN `info` ON `relations`.`id`=`info`.`id` WHERE `relations`.`parent_id`='$snippetID'";
$snippets = $mysqli->query($sql);
while($snippet = $snippets->fetch_assoc()) {
$tree[$node_id] = Array("text" => $snippet['name']);
if (hasChildNodes($mysqli, $snippet['id']) >= 1) {
buildTree($mysqli, $snippet['id'], 0, $tree[$node_id]['nodes']);
}
$node_id++;
}
}
$sql = "SELECT * FROM `info` WHERE `id`='$origSnippet' LIMIT 1";
$origSnippet = $mysqli->query($sql)->fetch_assoc();
$tree[$node_id] = Array("text" => $origSnippet['name']);
if (hasChildNodes($mysqli, $childSnippet) >= 1) {
buildTree($mysqli, $childSnippet, $node_id, $tree[$node_id]['nodes']);
}
关于php - 从数据库构建树多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32430678/