我使用下面的代码解析一个问题及其选择。
$entries = preg_split('/(?=[a-z\d]+\.(?!\d))/', $str, -1, PREG_SPLIT_NO_EMPTY);
$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[$id][] = '(\''. $entry .'\', '. $id .', 0)';
}
}
echo "<pre>";
print_r($arrQuestions);
echo "<pre>";
echo "<br>";
echo "<pre>";
print_r($arrAnswers);
echo "<pre>";
返回这些数组结果:
$arrQuestions output
Array
(
[1] => ('1. What is foo?')
[2] => ('2. What is foo?')
)
$arrAnswers output
Array
(
[1] => Array
(
[0] => ('a. foo1', 1, 0)
[1] => ('b. foo2', 1, 0)
[2] => ('c. foo3', 1, 0)
[3] => ('d. foo4', 1, 0)
)
[2] => Array
(
[0] => ('a. foo1', 2, 0)
[1] => ('b. foo2', 2, 0)
[2] => ('c. foo3', 2, 0)
[3] => ('d. foo4', 2, 0)
)
)
我的记录插入代码:
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$strDbQuery = "INSERT INTO `question` (`q_name`) VALUES ". implode(", ", $arrQuestions);
$strDbQuery_2 = "INSERT INTO `answers` (`choices`, `question`, `correct`) VALUES ". implode(", ", $arrAnswers);
// use exec() because no results are returned
$conn->exec($strDbQuery);
$conn->exec($strDbQuery_2);
echo "New questions uploaded successfully";
}
catch(PDOException $e)
{
echo $strDbQuery . "<br>" . $e->getMessage();
echo $strDbQuery_2 . "<br>" . $e->getMessage();
}
$conn = null;
我打印了事务的消息,并且在插入答案时,插入的值是一个数组。我使用函数implode()
但它仍被视为数组。
INSERT INTO `question` (`q_name`) VALUES ('1. What is foo1?'), ('2. What is foo2?')
INSERT INTO `answers` (`choices`, `question`, `correct`) VALUES Array, Array
我应该怎么做?
答案 0 :(得分:2)
编辑:更通用
$strDbQuery_2 = "INSERT INTO `answers` (`choices`, `question`, `correct`) VALUES ";
for($i = 1; $i <= count($arrAnswers); $i++) {
$strDbQuery_2 .= implode(", ", $arrAnswers[$i]) . ', ';
}
$strDbQuery_2 = substr($strDbQuery_2, 0, -2) . ';';