0

私のデータベースには 2 つの列があります。個人の ID は 1 列で 5 回繰り返され、それぞれが別の列で質問の回答とペアになっています。次のようなものです。

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

私がやりたいのは、すべての回答を次のようなIDを持つ1つの配列にマージすることです

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);が、これも機能しません。

4

4 に答える 4

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'),
)
于 2013-02-12T11:26:25.250 に答える
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);
于 2013-02-12T11:34:26.293 に答える
0
echo "<pre />";
for($i=0;$i<count($array);$i++)
{
    $output[$array[$i]['ID']][]=$array[$i]['Answer'];
}
print_r($output);
于 2013-02-12T11:26:15.043 に答える
0

必要なことは、ユーザー ID を保持する配列を用意することです。各ユーザー ID は、回答の配列を保持する連想配列です。

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 );
}
于 2013-02-12T11:20:19.433 に答える