Цикл с массивами путем группировки соответствующих значений - PullRequest
0 голосов
/ 13 октября 2011

Я пишу модуль для своего веб-сайта, который дает разбивку результатов тестов, мне нужно, чтобы некоторые из них были похожи на это,

Название теста
Средняя оценка 85%

Заголовок теста 2
Средняя оценка 12%

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

    Array
(
    [0] => Array
        (
            [result_id] => 11
            [test_taken] => 2011-10-04 16:22:59
            [mark] => 5
            [retaken] => false
            [tests_test_id] => 4
            [test_title] => Website Development CSS Basics
            [test_slug] => website-development-css-basics
            [mark_needed] => 90
            [retake] => Yes
            [topic_id] => 402
            [topics_topic_id] => 402
        )

    [1] => Array
        (
            [result_id] => 12
            [test_taken] => 2011-10-04 16:30:02
            [mark] => 50
            [retaken] => false
            [tests_test_id] => 5
            [test_title] => Another Test
            [test_slug] => another-test
            [mark_needed] => 10
            [retake] => No
            [topic_id] => 402
            [topics_topic_id] => 402
        )

)

Этот мой запрос в настоящее время

$this->db->select('results.result_id, results.test_taken, results.mark, results.retaken, results.tests_test_id, tests.test_title, tests.test_slug, tests.mark_needed, tests.retake, topics.topic_id, tests.topics_topic_id')
    ->from('results')
    ->join('tests', 'tests.test_id = results.tests_test_id', 'left')
    ->join('topics', 'topics.topic_id = tests.topics_topic_id', 'left');

    $query = $this->db->get();
    return $query->result_array();

Мне нужно каким-то образом сгруппировать все результаты с одинаковым идентификатором теста, чтобы я мог затем получить среднее значение результатов с помощью ключа метки.

Возможно ли это в PHP?

Ответы [ 2 ]

0 голосов
/ 13 октября 2011

Создайте новый массив, а затем зацикливайтесь - добавляя по ходу дела?

$sumArray = array();

foreach ($myArray as $key=>$val) {
    $sumArray[$key]+=$val;
}

print_r($sumArray['test_id']);
0 голосов
/ 13 октября 2011

Это та вещь, которую вы должны заставить базу данных сделать для вас. Что-то вроде:

SELECT AVG(mark) FROM test_results GROUP BY tests_test_id
...