我知道这是一个非常棒的问题,但我现在正在学习如何使用数组,我想知道如何将两个表放在不同的数组中,并将它们结合起来。
我正在建立一个菜单,这个菜单有子菜单,我创建了两个表,一个用于菜单,另一个用于子菜单,我想要两者结合,我会做这样的事情:< / p>
<ul>
<li>Menu</li>
<ul>
<li>Submenu</li>
</ul>
</ul>
所以,我有我的功能和查询
function addjo(){
global $name, $ii, $array;
addjoview($name, $ii, $array);
}
$query= ("select * from menu inner join submenu on menu.menu_id=submenu.menu_id");
$array = db_array($query, 'a+');
$ii = count($array);
我在这里调用此功能
<?php
function addjoview($name, $ii, $array){
for ($i = 0; $i < $ii; $i++) {
$id = $array[$i]['menu_id'];
$submenu_url = $array[$i]['submenu_url'];
$menu_id = $array[$i]['menu_id'];
echo $menu_id;
echo '<br>';
}
}
?>
答案 0 :(得分:0)
最简单的是单个数组:
SELECT menu.id, menu.name, submenu.id, submenu.name
FROM menu
LEFT JOIN submenu on menu.menu_id=submenu.menu_id
然后
$menu = array();
while(list($mid, $mname, $sid, $sname) = mysql_fetch_assoc($result)) {
if (!isset($menu[$mid])) {
$menu[$mid] = array('name' => $mname, 'sub' => array());
}
$menu[$mid]['sub'][$sid] = array('name' => $sname);
}
这会给你类似的东西:
Array (
1 => array(
'name' => 'parent menu item #1',
'sub' => array(
1 => 'first submenu',
2 => 'second submenu'
...
)),
2 => array(
'name' => ' parent second item',
'sub' => array(
1 => 'item in submenu #2'
etc...
答案 1 :(得分:0)
我猜你真正需要做的是将菜单/子菜单数据读入二维数组。为此,让我们从您的查询开始。目前,您没有在select语句中执行任何排序。你还没有共享你的表结构,所以我假设你有这样的东西:
菜单表:
menu_id
menu_label
menu_order
子菜单表
submenu_id
menu_id
submenu_label
submenu_url
submenu_order
现在,让我们写一个有用的查询:
SELECT
m.menu_label AS menu_label,
s.submenu_label AS submenu_label,
s.submenu_url AS submenu_url
FROM menu AS m
INNER JOIN submenu AS s
ON m.menu_id = s.menu_id
ORDER BY m.menu_order ASC, s.submenu_order ASC
现在让我们看看如何处理这些数据:
$menu_array = array();
while ($row = /* your DB row fetch here */) {
$array[$row['menu_label']][] = array(
'label' => $row['submenu_label'],
'url' => $row['submenu_url']
);
}
现在您的数组可能如下所示:
Array(
'Menu Label #1' => array(
0 => array(
'label' => 'Menu #1, Submenu #1 label',
'url' => 'http://menu1.submenu1.url'
),
... /* next item under Menu #1 */
),
'Menu Label #2' => array(
...
),
...
)
然后使用嵌套循环输出数组:
foreach ($menu_array as $menu_label => $submenu_array) {
echo '<ul><li>' . $menu_label . '</li><ul>';
foreach ($submenu_array as $submenu_item) {
echo '<li><a href="' . $submenu_item['url'] . '">' . $submenu_item['label'] . '</a></li>';
}
echo '</ul></ul>';
}
答案 2 :(得分:-1)
如果您需要一个菜单,我建议您使用这种基本方式。 使用一个表格作为菜单。 使用此结构
menu_id | menu_name | ..... | main_menu
1 File null
2 Save 1
3 Save As 1
4 About null
想法......所有带有空白'main_menu'字段的菜单都是第一个菜单项。 当您获得第一个菜单时,ypu可以使用
加载所有子菜单 select * from menus where main_menu='1'
然后你可以将它添加到你的表格中。
最后你的表必须看起来像
array
(
"1"=>array( "2" , "3"),
"4"=>About
)
更新: 您可以使用此查询获取所有菜单
(select * from menus where menus.main_menu is null )
union
(select M1.menu_id,M2.menu_name,M2.main_menu from menus M1 join menus M2 on M1.menu_id = M2.main_menu)
结果是
1 Exit 1
1 File NULL
1 Save 1
1 Save As 1
4 About NULL
您可以在此处使用for statement打印菜单。 此外,如果您需要子菜单下的子菜单,您可以将查询更改为存在
(select *,menu_id from menus where menus.main_menu is null )
union
(select M1.menu_id,M2.menu_name,M2.main_menu,M2.menu_id from menus M1 join menus M2 on M1.menu_id = M2.main_menu)