2016-03-29 14 views
0

私のデータベースの結果をJSON配列に取得しています。私はこの配列をランダム化したいのですが、今はカテゴリ1,2,3,4になり、常に同じ行にあるデータを取るためです。どのようにしてそれをランダム化して、カテゴリー4,2,1,3(必ずしもこの順序ではない)からデータを取り出すことができる。私のコード:PHPで配列をシャッフルすると配列がシャッフルされない

$query = $handler->query('SELECT DISTINCT c.cat_description, c.cat_name, c.cat_id, q.question, q.q_id FROM `categories` c 
             INNER JOIN `questions` q ON c.cat_id = q.cat_id '); 
$records = array(); 
$records = $query->fetchAll(PDO::FETCH_ASSOC); 
$first = array(); 
$second = array(); 
$third = array(); 
$query->closeCursor(); 
foreach($records as $k => $v){ 
    $first[] = array("category_name" => $v['cat_name'], "category_id" => $v['cat_id'], "category_description" => $v['cat_description'], "question_name" => $v['question'], "question_id" => $v['q_id'], "question_answers" => array()); 
    $second[] = $v['question']; 
} 

foreach ($second as $key => $value) { 
    $ques = $value; 
    $qu = $handler->query("SELECT a.quest_id, a.answer, a.iscorrect, a.anser_id FROM `answers` a INNER JOIN `questions` q ON a.quest_id = q.q_id WHERE q.question = '$ques' "); 
    $third = $qu->fetchAll(PDO::FETCH_ASSOC); 
    foreach($third as $tk => $tv){ 
     $third[$tk]['answer'.($tk+1)] = $tv['answer']; 
     $third[$tk]['iscorrect'.($tk+1)] = $tv['iscorrect']; 
    } 
    foreach ($first as $k => $v) { 
     $first[$key]['question_answers'] = $third; 
    } 
} 
function shuffle_assoc($list) { 
    if (!is_array($list)) return $list; 

    $keys = array_keys($list); 
    shuffle($keys); 
    $random = array(); 
    foreach ($keys as $key) { 
    $random[$key] = $list[$key]; 
    } 
    return $random; 
} 

$first = shuffle($first); 

$j['quiz'] = $first; 

echo json_encode($j); 

私はシャッフルを試みましたが、それは真実を返します。私はarray_randを試しましたが、キーを返します。これどうやってするの?

+0

関数 'shuffle_assoc'あなたのコードを持っているが、私には全く権利思わ:あなたが値とキーの間に関連性を維持するために必要がある場合あなたのために仕事をする必要があります。 – Reversal

+0

ここに入力配列を加えることができればいいですね、あなたの配列にどのようなインデックスがあるのか​​わかります。 – ameenulla0007

答えて

2

shuffle()は、要素の順序が異なる新しい配列を返す代わりに、配列を変更します。だから、すべてを行う必要がある:

shuffle($first); 

の代わりに:

$first = shuffle($first); 
+0

私の愚かなこと...ありがとう – BRG

関連する問題