PHP объединяет 2 массива и создает многомерный массив с одинаковыми значениями

У меня есть массив из моей базы данных, и он просто состоит из вопросов и ответов. Я пытаюсь объединить 2 массива и создать многомерный массив, если значения больше одного.

Array
(
[0] => Array
(
[question_id] => 1
[option_id] => 1
)

[1] => Array
(
[question_id] => 2
[option_id] => 3
)

[2] => Array
(
[question_id] => 3
[option_id] => 5
)

[3] => Array
(
[question_id] => 3
[option_id] => 6
)

)

Я пытался разделить ответы и вопросы на 2 разных массива, но не мог понять, как объединить их снова.

$user_questions = array_column($answers, 'question_id');
$user_answers = array_column($answers, 'option_id');

Что мне нужно это (вопрос 3 имеет 2 ответа):

Array
(
[1] => 1
[2] => 3
[3] => Array (5, 6)
)

0

Решение

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

while ($row = $stmt->someFetchMethod()) {
$result[] = $row;
}

Вместо этого используйте идентификатор вопроса в качестве ключа в массиве результатов и добавьте идентификатор параметра в массив с этим ключом.

while ($row = $stmt->someFetchMethod()) {
$result[$row['question_id']][] = $row['option_id'];
}
0

Другие решения

Код ниже создаст новый массив, зациклив существующий массив.

// Considering your existing array to be like this
$array = array(
'0' => array('question_id' => 1,'option_id' => 1),
'1' => array('question_id' => 2, 'option_id' => 3 ),
'2' => array('question_id' => 3,'option_id' => 5),
'3' => array('question_id' => 3,'option_id' => 6)
);
//define new array
$new_array = array();
// loop the array
foreach($array as $key=>$value){
// if the option/answer is already set to to question key
if(isset($new_array[$value['question_id']])){
// if question key is an array, push new option to that array
if(is_array($new_array[$value['question_id']])){
array_push($new_array[$value['question_id']], $value['option_id']);
}else{
// convert question key to array with the old value and new option value
$new_array[$value['question_id']] = array($new_array[$value['question_id']],$value['option_id']);
}
}
else{
// assing option as value to question key
$new_array[$value['question_id']] = $value['option_id'];
}
}
print_r($new_array);

Выход:

Array
(
[1] => 1
[2] => 3
[3] => Array
(
[0] => 5
[1] => 6
)

)
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector