PHP-如何为每个表创建数组?
我知道这是一个真正的noob问题,但我现在正在学习如何使用数组,我想知道如何将两个表放在不同的数组中,并将它们结合起来 我正在构建一个菜单,这个菜单有子菜单,我创建了两个表,一个用于菜单,另一个用于子菜单,我想将两者结合起来,我将这样做:PHP-如何为每个表创建数组?,php,arrays,Php,Arrays,我知道这是一个真正的noob问题,但我现在正在学习如何使用数组,我想知道如何将两个表放在不同的数组中,并将它们结合起来 我正在构建一个菜单,这个菜单有子菜单,我创建了两个表,一个用于菜单,另一个用于子菜单,我想将两者结合起来,我将这样做: <ul> <li>Menu</li> <ul> <li>Submenu</li> </ul> </ul> Array( 'Menu Label #1' =
<ul>
<li>Menu</li>
<ul>
<li>Submenu</li>
</ul>
</ul>
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(
...
),
...
)
我在这里调用这个函数
<?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>';
}
}
?>
最简单的是单阵列:
SELECT menu.id, menu.name, submenu.id, submenu.name
FROM menu
LEFT JOIN submenu on menu.menu_id=submenu.menu_id
然后
这会给你一些类似的东西:
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...
我猜您真正需要做的是将菜单/子菜单数据读入二维数组。为了做到这一点,让我们从您的查询开始。目前,您没有对select语句执行“不执行任何排序”。您还没有共享表结构,因此我假设您有如下内容:
<ul>
<li>Menu</li>
<ul>
<li>Submenu</li>
</ul>
</ul>
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(
...
),
...
)
菜单表:
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']
);
}
现在,您的阵列可能如下所示:
<ul>
<li>Menu</li>
<ul>
<li>Submenu</li>
</ul>
</ul>
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>';
}
很好,您现在正在使用连接,但是这段代码有什么问题?所有内容都在循环中,这就是为什么我要为每个表创建不同的数组,菜单表只有4列,脚本读取所有内容10次,因为子菜单有10列。继续,我想在不同的循环中分离菜单和子菜单。