Извините заранее, если есть ответ на этот вопрос, но я не смог найти именно то, что искал.слияние динамических многомерных массивов
В настоящее время у меня есть приложение для отчетов, которое возвращает результаты данных в многомерные массивы из запроса базы данных. Каждый массив строится из поля id. Я хотел бы иметь возможность объединить массивы в один, где id одинаковый.
Например, здесь приведен результат теста. Как вы видите, пользователь с идентификатором 1 в настоящее время имеет два результата.
Array
(
[0] => Array
(
[AssessmentQuestion] => 1
[AssessmentAnswer] => 0
[id] => 1
)
[1] => Array
(
[AssessmentQuestion] => 2
[AssessmentAnswer] => 2
[id] => 1
)
)
Array
(
[0] => Array
(
[AssessmentQuestion] => 1
[AssessmentAnswer] => 1
[id] => 2
)
)
Я хотел бы, чтобы результирующий набор выглядел так, если идентификаторы одинаковы.
Array
(
[0] => Array
(
[AssessmentQuestion] => 1
[AssessmentAnswer] => 0
[AssessmentQuestion] => 2
[AssessmentAnswer] => 2
[id] => 1
)
)
Большое спасибо.
Вот запросы, которыми я пользуюсь. Существует специальная функция ArrayFunctions :: captureArrayFromResult(), которая просто захватывает результаты массива. Первый запрос просто захватывает все активные идентификаторы входа пользователя, а затем каждый идентификатор возвращает всю информацию о вопросах оценки .
/**** COLLECT ALL ACTIVE USER ENTRY IDS ****/
$query = "SELECT DISTINCT ue.id
FROM user_entry ue
LEFT JOIN user_demographic_answers uda ON ue.id = uda.user_entry_id
LEFT JOIN user_assessment_answers uaa ON ue.id = uaa.user_entry_id
WHERE $condition
AND DATE(ue.datetime_finished) BETWEEN '{$this->reportDateRangeStart}' AND '{$this->reportDateRangeEnd}'";
$results = db_Query($query);
$this->reportUserEntryID = ArrayFunctions::captureArrayFromResult($results, "id", "id");
foreach($this->reportUserEntryID as $userID)
{
/**** COLLECT ASSESSMENT QUESTIONS ****/
$query = SELECT DISTINCT uaa.question_id as 'AssessmentQuestion', uaa.answer_value as 'AssessmentAnswer', ue.id
FROM user_assessment_answers uaa
LEFT JOIN report_field_options rfo ON uaa.question_id = rfo.assessment_question_id
LEFT JOIN user_entry ue ON uaa.user_entry_id = ue.id
WHERE ($condition)
AND DATE(ue.datetime_finished) BETWEEN '{$this->reportDateRangeStart}' AND '{$this->reportDateRangeEnd}'
AND ue.id IN ($userID)
ORDER BY uaa.question_id";
$results = db_Query($query);
$this->reportQuestionAssessmentAnswers = ArrayFunctions::captureArrayFromResult($results);
}
Там не может быть два разные значения с одним и тем же индексом. – fedorqui
Отказ от комментария Фёдорки; однако вы можете изменить значение на массив значений. AssementQuestion => array (1,2) – Kyle
Попробуйте использовать '$ new_array_with_unique_id = array_unique ($ your_previous_array);' – CIRCLE