0

我有一个这样的数组,如何根据类别 ID 将其拆分为其他几个数组?

即有类别 1 -> 论坛 1,论坛 4。类别 2 -> 论坛 3,论坛 7

我查看了array_chunk,但可能有任意数量的类别或论坛

Array
(
    [category_id] => 1
    [category_name] => Main
    [forum_id] => 1
    [forum_name] => General forum
)
Array
(
    [category_id] => 1
    [category_name] => Main
    [forum_id] => 2
    [forum_name] => Test forum
)
Array
(
    [category_id] => 2
    [category_name] => Test
    [forum_id] => 3
    [forum_name] => Another test
)

我正在使用这个 SQL 查询(如果它只能在用 PHP 修改之前用 SQL 完成)

$forums_query = mysqli_query($sql_connect, 'SELECT `categories`.`category_id`, `categories`.`category_name`,
                                            `forums`.`forum_id`, `forums`.`forum_name`, `forums`.`category_id`
                                            FROM `categories`
                                                LEFT JOIN `forums`
                                                    ON `categories`.`category_id` = `forums`.`category_id`
                                            ORDER BY `categories`.`category_position`, `forums`.`forum_position` ASC');

编辑:顺便说一句,我可以想到一种方法,即循环遍历它,并且对于每个猫 ID(如 X),检查是否存在名为 catX 的数组,如果不存在则创建它

但是,每次有人访问该页面时都会运行它,所以我希望它尽可能快速和轻量资源

4

2 回答 2

2

我不确定我是否做对了,看看这个演示:

<?php
$forums[] = array('category_id' => 1, 'category_name' => 'Main', 'forum_id' => 1, 'forum_name' => 'General forum');
$forums[] = array('category_id' => 1, 'category_name' => 'Main', 'forum_id' => 2, 'forum_name' => 'General 2');
$forums[] = array('category_id' => 1, 'category_name' => 'Main', 'forum_id' => 3, 'forum_name' => 'General 3');
$forums[] = array('category_id' => 1, 'category_name' => 'Main', 'forum_id' => 4, 'forum_name' => 'General 4');
$forums[] = array('category_id' => 2, 'category_name' => 'Main2', 'forum_id' => 1, 'forum_name' => 'General forum');
$forums[] = array('category_id' => 2, 'category_name' => 'Main2', 'forum_id' => 2, 'forum_name' => 'General 2');
$forums[] = array('category_id' => 3, 'category_name' => 'Main3', 'forum_id' => 3, 'forum_name' => 'General 3');
$forums[] = array('category_id' => 4, 'category_name' => 'Main3', 'forum_id' => 4, 'forum_name' => 'General 4');


$forums_organized = array();
foreach($forums as $forum){
    $forums_organized[$forum['category_id']][]  = array('forum_name' => $forum['forum_name'], 'forum_id' => $forum['forum_id']);
}
print_r($forums_organized);

输出:

Array
(
    [1] => Array
        (
            [0] => Array
                (
                    [forum_name] => General forum
                    [forum_id] => 1
                )

            [1] => Array
                (
                    [forum_name] => General 2
                    [forum_id] => 2
                )

            [2] => Array
                (
                    [forum_name] => General 3
                    [forum_id] => 3
                )

            [3] => Array
                (
                    [forum_name] => General 4
                    [forum_id] => 4
                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [forum_name] => General forum
                    [forum_id] => 1
                )

            [1] => Array
                (
                    [forum_name] => General 2
                    [forum_id] => 2
                )

        )

    [3] => Array
        (
            [0] => Array
                (
                    [forum_name] => General 3
                    [forum_id] => 3
                )

        )

    [4] => Array
        (
            [0] => Array
                (
                    [forum_name] => General 4
                    [forum_id] => 4
                )

        )

)
于 2013-03-31T00:22:04.063 回答
0

你的情况不是 INNER JOIN 吗?

$old_array = array();
$new_array = array();

foreach($old_array AS $tab) {
    if(!array_key_exists($tab['category_name'], $new_array)) {
        $tmp = array($tab['forum_name']);
        $tmp = array($tab['category_name']=>$tmp);
        $new_array = array_merge($new_array, $tmp);
    }
    else {
        array_push($new_array[$tab['category_name']], $tab['forum_name']);
    }
}
于 2013-03-31T01:15:53.490 回答