Php 合并动态多维数组
如果对此有答案,请提前道歉,但我找不到确切的答案 我目前有一个报告应用程序,它将数据结果从数据库查询返回到多维数组中。每个数组都是基于id字段构建的。我希望能够将数组合并到一个id相同的数组中Php 合并动态多维数组,php,arrays,Php,Arrays,如果对此有答案,请提前道歉,但我找不到确切的答案 我目前有一个报告应用程序,它将数据结果从数据库查询返回到多维数组中。每个数组都是基于id字段构建的。我希望能够将数组合并到一个id相同的数组中 Array ( [0] => Array ( [AssessmentQuestion] => 1 [AssessmentAnswer] => 0 [AssessmentQuestion] => 2 [A
Array
(
[0] => Array
(
[AssessmentQuestion] => 1
[AssessmentAnswer] => 0
[AssessmentQuestion] => 2
[AssessmentAnswer] => 2
[id] => 1
)
)
例如,这里有一个测试结果集。如您所见,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
)
)
如果id相同,我希望结果集看起来像这样
Array
(
[0] => Array
(
[AssessmentQuestion] => 1
[AssessmentAnswer] => 0
[AssessmentQuestion] => 2
[AssessmentAnswer] => 2
[id] => 1
)
)
非常感谢
下面是我正在运行的查询。有一个自定义函数ArrayFunctions::captureArrayFromResult(),它只是捕获数组结果。
第一个查询只获取所有活动用户条目id,然后per id返回所有
评估问题信息
/**** 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);
}
简短回答:不可能按您的要求执行,因为数组键必须是唯一的 我建议,在组合逻辑期间,创建一系列
评估问题
和评估答案
,例如:
Array
(
[0] => Array
(
[id] => 1,
[AssesmentQuestions] => Array
(
[0] => 1,
[1] => 2
),
[AssesmentAnswers] => Array
(
[0] => 0,
[1] => 2
)
)
)
您可以使用foreach循环来实现这一点:
$main_arr = array
(
array
(
'AssessmentQuestion' => 1,
'AssessmentAnswer' => 0,
'id' => 1
),
array
(
'AssessmentQuestion' => 2,
'AssessmentAnswer' => 2,
'id'=> 1
),
array
(
'AssessmentQuestion' => 3,
'AssessmentAnswer' => 4,
'id' => 2
),
array
(
'AssessmentQuestion' => 5,
'AssessmentAnswer' => 6,
'id'=> 1
)
);
foreach ($main_arr as $arr) {
$new_arr[$arr['id']]['id'] = $arr['id'];
$new_arr[$arr['id']]['AssessmentQuestions'][] = $arr['AssessmentQuestion'];
$new_arr[$arr['id']]['AssessmentAnswers'][] = $arr['AssessmentAnswer'];
}
var_dump($new_arr);
同一索引不能有两个不同的值;但是,您可以将该值更改为一个值数组。AssementQuestion=>array(1,2)尝试使用
$new\u-array\u和\u-unique\u-id=array\u-unique($your\u-previous\u-array)代码>谢谢@jterry。我目前正在从一个查询中检索所有数据,我是否应该将其分解为每个字段的多个查询,然后以这种方式合并信息?是的。这会更好。你可以使用我的foreach循环来合并它们。谢谢@Fouad Fodail。似乎下面的每个问题都是在前一个问题的基础上构建的。我认为只有在找到具有相同id的多个数组时,才应该运行此函数。是。根据您的数据示例。我遇到的问题是我的逻辑嵌套在foreach循环中,并且我很难确定是否多次找到id。我在上面添加了我的查询。