проблема php структуры данных массива - PullRequest
1 голос
/ 08 августа 2010

Я хочу создать новую структуру данных, используя массивы для этого запроса, это будет выглядеть так:

начнется с запроса и примера кода

запрос http://img85.imageshack.us/img85/170/query.png я хочу создать новую структуру данных, используя массивы для этого запроса, это будет выглядеть так:

//this is for the first headline
[46] => Array
        (
            [headline_name] => headline 1
            [score] => 50
            [questions] => Array
                (
                    [0] => Array
                        (
                            [question_id] => 136
                            [question_name] => question 3 , headline 1
                            [choice_0] => 0
                            [choice_1] => 0
                            [choice_2] => 0
                            [choice_3] => 0
                            [choice_4] => 0
                        ) ,
                    [1] => Array
                        (
                         ....
                        )
                )
        )

код, который я написал для достижения этого результата:

foreach ($result as $row) {
  $data[$row->headline_id]= array( 
    'headline_name' => $row->headline_name ,
    'score' => $row->score,
  );
  $data[$row->headline_id]['questions'][] = array (
      'question_id'=>$row->question_id ,
      'question_name'=>$row->question_name ,
      'choice_0' => $row->choice_0 ,
      'choice_1' => $row->choice_1 ,
      'choice_2' => $row->choice_2 ,
      'choice_3' => $row->choice_3 ,
      'choice_4' => $row->choice_4             
  );  
}

проблема с ним, он показывает только последний вопрос в каждом заголовке, в каждом цикле в массиве вопросов массив не добавляется, они перезаписывают друг друга


если я хочу заставить его работать, мне нужно удалить, я должен удалить строки для партитуры и заголовка_имя, код будет таким

foreach ($result as $row) {

  $data[$row->headline_id]['questions'][] = array (
      'question_id'=>$row->question_id ,
      'question_name'=>$row->question_name ,
      'choice_0' => $row->choice_0 ,
      'choice_1' => $row->choice_1 ,
      'choice_2' => $row->choice_2 ,
      'choice_3' => $row->choice_3 ,
      'choice_4' => $row->choice_4 
  );  

}

Я хочу, чтобы решение было решено с записью headline_name и счета в массиве

1 Ответ

2 голосов
/ 08 августа 2010

проблема в том, что вы сбрасываете массив во второй раз при входе в цикл с помощью =,

, чтобы решить его, вам нужно добавить немного, если

    if(!isset($data[$row->headline_id])) {
      $data[$row->headline_id]= array( 
        'headline_name' => $row->headline_name ,
        'score' => $row->score,
      );
  }

другая проблема: я рекомендую не хранить эти поля в этой таблице не нормализуется,

headline_name
score
...