Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-如何为每个表创建数组?_Php_Arrays - Fatal编程技术网

PHP-如何为每个表创建数组?

PHP-如何为每个表创建数组?,php,arrays,Php,Arrays,我知道这是一个真正的noob问题,但我现在正在学习如何使用数组,我想知道如何将两个表放在不同的数组中,并将它们结合起来 我正在构建一个菜单,这个菜单有子菜单,我创建了两个表,一个用于菜单,另一个用于子菜单,我想将两者结合起来,我将这样做: <ul> <li>Menu</li> <ul> <li>Submenu</li> </ul> </ul> Array( 'Menu Label #1' =

我知道这是一个真正的noob问题,但我现在正在学习如何使用数组,我想知道如何将两个表放在不同的数组中,并将它们结合起来

我正在构建一个菜单,这个菜单有子菜单,我创建了两个表,一个用于菜单,另一个用于子菜单,我想将两者结合起来,我将这样做:

<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列。继续,我想在不同的循环中分离菜单和子菜单。