2015-02-11 4 views
0

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

<?php 

$entries = preg_split('/(?=[a-z\d]+\.(?!\d))/', $str, -1, PREG_SPLIT_NO_EMPTY); 

    $questions = array(); 
    $currentQuestion = null; 
    $id = 0; 

    foreach($entries as $entry) { 
    if(is_numeric(substr($entry, 0, 1)) === true) { 
     $currentQuestion = $entry; 
     $questions[$entry] = array(); 
     $id++; 
     // echo "INSERT INTO question (id, q_name) VALUES ($id, $currentQuestion)"."<br>"; 
     // mysqli_query($con, "INSERT INTO question (id, q_name) VALUES (NULL, '$currentQuestion')"); 
     continue; 

    } 

    // mysqli_query($con, "INSERT INTO answers (id, choices, question, correct) VALUES (NULL, 'choices', $id , 0);"); 
    // echo "INSERT INTO answers (id, choices, question, correct) VALUES (NULL, 'choices', $id , 'stuff')"."<br>"; 
    $questions[$currentQuestion][] = $entry; 
    } 

Это результат массива.

Array 
(
    [1. What is love?] => Array 
     (
      [0] => a. Haddaway 

      [1] => b. Haxxaway 

      [2] => c. Hassaway 

      [3] => d. Hannaway 

     ) 

    [2. What is love? ] => Array 
     (
      [0] => a. Haddaway 

      [1] => b. Haxxaway 

      [2] => c. Hassaway 

      [3] => d. Hannaway 

     ) 

    [3. What is love 1.1? ] => Array 
     (
      [0] => a. Haddaway 

      [1] => b. Haxxaway 

      [2] => c. Hassaway 

      [3] => d. Hannaway 

     ) 

    [4. What is love? ] => Array 
     (
      [0] => a. Haddaway 

      [1] => b. Haxxaway 

      [2] => c. Hassaway 

      [3] => d. Hannaway 
     ) 

) 

И это моя структура базы данных: question столбец в таблице answers является первичным ключом из questions таблицы, которая будет определять, какой вопрос выбора принадлежит ...

questions 
+-------+--------------------------+ 
| id | q_name     | 
+-------+--------------------------+ 
| 1 | 1.) What is foo?  | 
| 2 | 2.) What is foo?  | 
+-------+--------------------------+ 

answers 
+-------+-------------+-----------------------+ 
| id | choices  | question | correct | 
+-------+-------------+-----------------------+ 
| 1 | a. foo1 | 1   | 0  | 
| 2 | b. foo2 | 1   | 0  | 
| 3 | c. foo3 | 1   | 1  | 
| 4 | a. foo3 | 2   | 0  | 
| 5 | b. foo2 | 2   | 1  | 
| 6 | c. foo1 | 2   | 0  | 
+-------+-------------+-----------------------+ 

мне удалось вставить вопросы к db, но у меня возникли проблемы с вставкой вариантов, потому что я смущен тем, что должен сделать с $questions, чтобы получить выбор ...

Любые предложения (а) сделают!

+0

** 1) ** Не пытайтесь выполнить запрос в цикле, но создайте его в цикле и выполните его после цикла. ** 2) ** Пожалуйста, вы можете вставить структуру таблиц базы данных; 'ответы' и' вопросы' ('SHOW CREATE TABLE ответы;')? –

+0

Ох, извините, что .. хорошо, я отредактирую его, спасибо большое! – yowza

+0

@ ʰᵈˑ Я обновил свой вопрос, надеюсь, это достаточно основательно. – yowza

ответ

1

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

Вот разбивка того, что вам нужно сделать;

  • Вставьте вопрос в questions
  • захватить last_insert_id и сохранить его в переменной
  • Вставьте ответы в answers
  • Link ответы на вопросы, используя last_insert_id

сейчас на код.

Сбор данных

$arrAnswers = array(); 
$arrQuestions = array(); 
$id = 0; //Assuming your table is empty 

foreach($entries as $entry) { //Loop through the grabbed records 
    if(is_numeric(substr($entry, 0, 1)) === true) { //Is it a question? 
    $id++;  
    $arrAnswers[$id] = array(); 
    $arrQuestions[$id] = '(\''. $entry .'\')'; 
    } else { //Ok, it's a possible answer to a question 
    $arrAnswers[] = '(\''. $entry .'\', '. $id .', 0)'; 
    } 
} 

Вставка вопросов

Теперь у нас есть массив, содержащий все ответы на вопрос. Ключ массива будет идентификатором вопроса в базе данных.Теперь мы можем вставить вопросы, делая;

$strDbQuery = "INSERT INTO `questions` (`q_name`) VALUES ". implode(", ", $arrQuestions); 
// Execute the query. 

Установка ответы

Теперь вы вставили свои вопросы, теперь вы можете вставить свои ответы.

$strDbQuery = "INSERT INTO `answers` (`choices`, `question`, `correct`) VALUES ". implode(", ", $arrAnswers); 
// Execute the query. 

Поскольку ваш массив (в вашем вопросе) не хранящие значения, чтобы указать, является ли правильным или нет ответ, вы должны сделать это вручную.

+0

Да, я сделаю кое-что, чтобы определить, что ответ правильный. Я очень ценю ваше время, чтобы помочь мне! Престижность! Я узнаю новые вещи! – yowza

+0

Добро пожаловать :) Рад, что я мог бы помочь –

+0

Здравствуйте, еще раз, у меня есть ошибка при вставке ответов на db, он говорит, что Array преобразован в String Conversion, я думаю, что это происходит, поскольку это многомерный массив? это то, что он возвращает ... INSERT INTO 'ответы' (' choice', 'question',' correct') VALUES Array – yowza

1

Чтобы сохранить массив, вам необходимо записать его в виде строки в базу данных. Есть два (2) функции, которые приходят на ум:

serialize()serialize
json_encode()json_encode

Либо работает большой; serialize() преобразует массив в строку, которую вы затем можете сохранить; для получения вашего массива позднее, передайте строку функции unserialize().
json_encode() также имеет функцию json_decode(). Для чтения данных в виде массива [а не объект в этом случае], вы должны будете сделать это:
$questions = json_decode($string_from_database, true);

Я надеюсь, что это помогает.

+0

Я посмотрю на это! Я хотел бы выразить свою признательность! – yowza

+0

На мой взгляд, я думаю, что json_encode() привлекателен для меня, мне может понадобиться второе мнение! – yowza

+0

@yowza ты прав. Он обычно будет меньше по размеру, чем 'serialize()' –

Смежные вопросы