我有一个看起来像
的数组 Array
(
[438044691:maincategoryone] => Array
(
[0] => Array
(
[id] => 438044692
[name] => main category one item one
[category] => Array
(
[2] => Array
(
[id] => 4380444456
[name] => main category one item one - sub
)
)
)
[1] => Array
(
[id] => 438044693
[name] => main category one item two
)
)
[438044701:maincategorytwo] => Array
(
[0] => Array
(
[id] => 438044702
[name] => main category two item one
)
)
[438044709:maincategorythree] => Array
(
[0] => Array
(
[id] => 438044710
[name] => main category three item one
)
[1] => Array
(
[id] => 438044711
[name] => main category three item two
)
)
)
我如何在PHP中循环遍历这个并将数据存储在同一个表(MYSQL)中的父子孙关系中。
此外,插入数据后按顺序(父子孙子)检索数据的示例查询也很棒。
希望我的问题有道理。如果没有请原谅我,但我能告诉你更多信息。
非常感谢。
答案 0 :(得分:0)
我建议在mySQL表中使用父类的引用键,如下所示:
CREATE TABLE categories (id INTEGER, name VARCHAR(32), parent INTEGER)
然后在你的PHP代码中,你有一个树模型,你读取id索引数组中的所有项目,然后将它组装成一个树。
$q = mysql_query("SELECT * FROM categories");
$n = mysql_num_rows($q);
$items = array();
while($item = mysql_fetch_assoc($q))
$items[$item['id']] = $item;
foreach($items as $item)
$items[$item['parent']]['category'] = $item;
print_r($items);
要从树中读取值,我将使用递归函数:
function add_to_tree($items, $tree_part, $parent) {
$tree_part['parent'] = $parent;
$items.push($tree_part);
foreach($tree_part['categories'] as $child)
add_to_tree($items, $child, $tree_part['id']);
}
然后你只需创建一个空数组,填充它并按顺序读取值。
$items = array();
add_to_tree($items, $tree);
foreach($items as $item)
mysql_query("INSERT INTO categories VALUES('{$item['id']}', '{$item['name']}', '{$item['parent']}');
当然,您必须处理特殊情况,例如根对象和缺少的链接,这在以前的代码中不受支持。
答案 1 :(得分:0)
您可以通过创建包含3列id
,name
,parentid
您可以使用PHP array_walk函数遍历数组并随意插入行(或构建一个sql查询以便稍后执行):
$myArray = ......
array_walk($myArray , 'insertInDb', null);
function insertInDb($item, $key, $parent_id) {
if (is_null($parent_id)) {
$sql = sprintf('INSERT INTO myTable (`id`, `name`, `parentid`) VALUES (%d, "%s", NULL)', $item['id'], $item['name']);
} else {
$sql = sprintf('INSERT INTO myTable (`id`, `name`, `parentid`) VALUES (%d, "%s", %d)', $item['id'], $item['name'], $parent_id);
}
array_walk($item['category'] , 'insertInDb', $item['id']);
}