2013-02-12 4 views
0

В моей базе данных есть 2 столбца. Идентификатор человека повторяется 5 раз в 1 столбец и каждый его пару в другой колонке с вопросом ответом что-то вроде этого:Слияние 2 массивов с использованием array_merge_recursive не работает должным образом

ID Answer 
1 A1 
1 A4 
1 A2 
1 A9 
1 A3 
12 A1 
12 A11 
12 A12 
12 A17 
12 A2 

Что я хочу, чтобы попытаться сделать это, чтобы объединить все ответы в 1 массив с его ID что-то вроде

array (
     [1] => array (0 => 'A1', 1 => 'A4', 2 => 'A2', 3 => 'A9', 4 => 'A3'), 
     [12] => array (0 => 'A1', 1 => 'A11', 2 => 'A12', 3 => 'A17', 4 => 'A2') 
     ) 

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

foreach ($quiz_answers as $aq => $aa) 
      { 
       $array_loop = array( $aa['response_id'] => array($aa['answer'])); 
       $ss = array_merge_recursive($array_loop, $array_loop); 

      } 

Моя проблема в том, что как-то оленья кожа петли слияние по желанию, и я получаю только 2 выхода. Я не очень хорошо разбираюсь в массивах и, вероятно, мне нужна другая функция, но я не совсем уверен, чего не хватает. Я пробовал использовать другую переменную в array_merge_recursive($anotherVariable, $array_loop);, но это тоже не работает.

ответ

2

Просто измените свой цикл foreach построить результирующий массив, как вы хотите.

foreach ($quiz_answers as $aa) { 
    $ss[$aa['response_id']][] = $aa['answer']; 
} 

Это дает $ss массив, как вы хотите:

array(
    1 => array('A1', 'A4', 'A2', 'A9', 'A3'), 
    12 => array('A1', 'A11', 'A12', 'A17', 'A2'), 
) 
+0

Гораздо лучше, чем мое решение, оно более кратким. Используйте это вместо этого. – Husman

0

Что вам нужно сделать, это иметь массив, содержащий идентификаторы пользователя, каждый из которых является ассоциативным массивом, который содержит массив ответов.

array (
     [1] => array (0 => 'A1', 0 => 'A4', 0 => 'A2', 0 => 'A9', 0 => 'A3'), 
     [12] => array (0 => 'A1', 0 => 'A11', 0 => 'A12', 0 => 'A17', 0 => 'A2') 
     ) 

так что-то, как это будет работать (код скелета ниже)

$answers = array(); 
foreach($quiz_answers as $id => $ans) { 
    // check if $answers[$id] exists, otherwise create it here.... 
    if(exists(....)) ... 
    else $answers[$id] = array(); 

    // Then add the current answer to it, as below 
    array_push($answers[$id], $ans); 
} 
+0

даже я использую array_push вместо array_merge. – Rinzler

+0

'array_push ($ answers [$ aa ['response_id']], array ($ aa ['answer'])); 'возвращаем следующую ошибку array_push()' ожидает, что параметр 1 будет массивом, null задано –

0
echo "<pre />"; 
for($i=0;$i<count($array);$i++) 
{ 
    $output[$array[$i]['ID']][]=$array[$i]['Answer']; 
} 
print_r($output); 
0
$quiz_answers = // get all the data from database. 
$res   = array(); 
foreach($quiz_answers as $key=>$val){ 
    $res[$val['response_id']][] = $val['answer']; 
} 

print_r($res); 
Смежные вопросы