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');

編集:ちなみに、それをループする1つの方法を考えることができ、すべての猫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 に答える