Преобразование многомерного массива в другой многомерный массив, но с другой структурой - PullRequest
0 голосов
/ 26 марта 2012

У меня возникли проблемы с управлением сложным массивом, который выглядит следующим образом:

Array
(
    [0] => Array
        (
            [checklist_position] => 8
            [checklist_id] => 2
            [question_id] => 11
            [section] => 1
            [sum_a] => 332611
            [sum_b] => 566201
        )

    [1] => Array
        (
            [checklist_position] => 9
            [checklist_id] => 2
            [question_id] => 12
            [section] => 1
            [sum_a] => 567725
            [sum_b] => 67301
        )

    [2] => Array
        (
            [checklist_position] => 10
            [checklist_id] => 2
            [question_id] => 13
            [section] => 1
            [sum_a] => 20004
            [sum_b] => 38381
        )

    [3] => Array
        (
            [checklist_position] => 11
            [checklist_id] => 2
            [question_id] => 14
            [section] => 2
            [sum_a] => 699144
            [sum_b] => 139456
        )

    [4] => Array
        (
            [checklist_position] => 12
            [checklist_id] => 2
            [question_id] => 15
            [section] => 2
            [sum_a] => 791204
            [sum_b] => 336133
        )

    [5] => Array
        (
            [checklist_position] => 13
            [checklist_id] => 2
            [question_id] => 16
            [section] => 2
            [sum_a] => 447501
            [sum_b] => 503112
        )

    [6] => Array
        (
            [checklist_position] => 14
            [checklist_id] => 2
            [question_id] => 17
            [section] => 2
            [sum_a] => 651332
            [sum_b] => 803628
        )

)

Я пытаюсь преобразовать его в массив, подобный этому:

Array
(
    [0] => Array
        (
            [section] => 1
            [questions] => Array
                (
                    [0] => Array
                        (
                            [checklist_position] => 1
                            [checklist_id] => 1
                            [question_id] => 1
                            [section] => 1
                            [sum_a] => 348659
                            [sum_b] => 273072
                        )

                    [1] => Array
                        (
                            [checklist_position] => 2
                            [checklist_id] => 2
                            [question_id] => 2
                            [section] => 1
                            [sum_a] => 825992
                            [sum_b] => 189190
                        )

                )

        )

    [1] => Array
        (
            [section] => 2
            [questions] => Array
                (
                    [0] => Array
                        (
                            [checklist_position] => 1
                            [checklist_id] => 1
                            [question_id] => 1
                            [section] => 1
                            [sum_a] => 348659
                            [sum_b] => 273072
                        )

                    [1] => Array
                        (
                            [checklist_position] => 2
                            [checklist_id] => 2
                            [question_id] => 2
                            [section] => 1
                            [sum_a] => 825992
                            [sum_b] => 189190
                        )

                )

        )

)

Проблема в том, что я не знаю, с чего начать, и любая подсказка очень ценится.

Спасибо!

Ответы [ 2 ]

1 голос
/ 26 марта 2012

@ Решение Патрокло упрощено:

$result = array();
foreach($array1 as $data){
    $section = $data['section'];
    $result[$section]['section'] = $section;
    $result[$section]['questions'][] = $data;
}

$result = array_values($result); // to re order

$ array1 - ваш массив с текущими данными, а $ result - это то, что вы ожидаете

1 голос
/ 26 марта 2012

Вероятно, у вас будет меньше проблем с использованием номера раздела в ключах массивов, например ($ array1 - первый массив вашего вопроса):

foreach($array1 as $data)
{
    if(!array_key_exists($result[data['section']))
    {
        $result[$data['section']] = array('section' => $data['section']);
    }

    $result[$data['section']['questions'][] = $data;
}

Не проверили,но это должно сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...