【发布时间】:2016-10-04 15:16:54
【问题描述】:
我的网站中有一些表格供用户填写。 每个表单提交后,所有提交的信息都会被添加到一个关联数组中。
之后,我将该数组编码为 JSON,并将其保存到 MySQL 数据库中的单个字段中。
用户可能会填写许多表单,我想添加每个数组(使用该用户填写的表单的信息),以添加到已作为 JSON 字符串存储在数据库中的数组中。作为该数组中的新项目。
例如:
数组 1:
array {
["examenID"]=> string(1) "4"
["cursoID"]=> string(2) "15"
["fechaExamen"]=> string(22) "04-10-2016 11:23:39 AM"
["pregunta"]=> array(2) {
[0]=> string(18) "el azul es azulado"
[1]=> string(28) "el verde es azulado también"
}
["respuestaCorrecta"]=> array(2) {
[0]=> string(1) "v"
[1]=> string(1) "f"
}
["respuestaUsuario"]=> array(2) {
[0]=> string(1) "v"
[1]=> string(1) "f"
}
["puntaje"]=> int(2)
["estado"]=> string(8) "APROBADO"
}
数组 2:
array {
["examenID"]=> string(1) "6"
["cursoID"]=> string(2) "15"
["fechaExamen"]=> string(22) "03-10-2016 10:20:40 AM"
["pregunta"]=> array(2) {
[0]=> string(18) "el negro es blanco"
[1]=> string(28) "el negro es negro"
[2]=> string(28) "los colores son distintos"
}
["respuestaCorrecta"]=> array(2) {
[0]=> string(1) "f"
[1]=> string(1) "v"
[2]=> string(1) "v"
}
["respuestaUsuario"]=> array(2) {
[0]=> string(1) "f"
[1]=> string(1) "f"
[2]=> string(1) "f"
}
["puntaje"]=> int(1)
["estado"]=> string(8) "DESAPROBADO"
}
我想合并它们,所以结果如下:
[0] array {
["examenID"]=> string(1) "4"
["cursoID"]=> string(2) "15"
["fechaExamen"]=> string(22) "04-10-2016 11:23:39 AM"
["pregunta"]=> array(2) {
[0]=> string(18) "el azul es azulado"
[1]=> string(28) "el verde es azulado también"
}
["respuestaCorrecta"]=> array(2) {
[0]=> string(1) "v"
[1]=> string(1) "f"
}
["respuestaUsuario"]=> array(2) {
[0]=> string(1) "v"
[1]=> string(1) "f"
}
["puntaje"]=> int(2)
["estado"]=> string(8) "APROBADO"
}
[1] array {
["examenID"]=> string(1) "6"
["cursoID"]=> string(2) "15"
["fechaExamen"]=> string(22) "03-10-2016 10:20:40 AM"
["pregunta"]=> array(2) {
[0]=> string(18) "el negro es blanco"
[1]=> string(28) "el negro es negro"
[2]=> string(28) "los colores son distintos"
}
["respuestaCorrecta"]=> array(2) {
[0]=> string(1) "f"
[1]=> string(1) "v"
[2]=> string(1) "v"
}
["respuestaUsuario"]=> array(2) {
[0]=> string(1) "f"
[1]=> string(1) "f"
[2]=> string(1) "f"
}
["puntaje"]=> int(1)
["estado"]=> string(8) "DESAPROBADO"
}
我试过了:
$total[] = $array1;
$total[] = $array2;
但问题是用户第一次填写表单时,它是作为单个项目填写的。第二次填充为第二项,但第三次后,新项未按预期方式存储。
第三次之后,数组变成这样,打破了结构:
array(2) {
[0]=> array(2) {
[0]=> array(2) { //WHY?
[0]=> NULL // WHY?
[1]=> array(8) {
["examenID"]=> string(1) "4"
["cursoID"]=> string(2) "15"
["fechaExamen"]=> string(22) "04-10-2016 11:59:48 AM"
["pregunta"]=> array(2) {
[0]=> string(18) "el azul es azulado"
[1]=> string(28) "el verde es azulado también"
}
["respuestaCorrecta"]=> array(2) {
[0]=> string(1) "v"
[1]=> string(1) "f"
}
["respuestaUsuario"]=> array(2) {
[0]=> string(1) "v"
[1]=> string(1) "v"
}
["puntaje"]=> int(1)
["estado"]=> string(8) "APROBADO"
}
}
[1]=> array(8) {
["examenID"]=> string(1) "3"
["cursoID"]=> string(2) "15"
["fechaExamen"]=> string(22) "04-10-2016 11:59:56 AM"
["pregunta"]=> array(3) {
[0]=> string(42) "El caballo blanco de San Martin era blanco"
[1]=> string(15) "La sal es dulce"
[2]=> string(19) "La lluvia es mojada"
}
["respuestaCorrecta"]=> array(3) {
[0]=> string(1) "v"
[1]=> string(1) "f"
[2]=> string(1) "v"
}
["respuestaUsuario"]=> array(3) {
[0]=> string(1) "f"
[1]=> string(1) "f"
[2]=> string(1) "f"
} ["puntaje"]=> int(1)
["estado"]=> string(11) "DESAPROBADO"
}
}
[1]=> array(8) {
["examenID"]=> string(1) "4"
["cursoID"]=> string(2) "15"
["fechaExamen"]=> string(22) "04-10-2016 12:00:03 PM"
["pregunta"]=> array(2) {
[0]=> string(18) "el azul es azulado"
[1]=> string(28) "el verde es azulado también"
}
["respuestaCorrecta"]=> array(2) {
[0]=> string(1) "v"
[1]=> string(1) "f"
}
["respuestaUsuario"]=> array(2) {
[0]=> string(1) "f"
[1]=> string(1) "f"
}
["puntaje"]=> int(1)
["estado"]=> string(8) "APROBADO"
}
}
这是我正在做的事情:
我正在查询数据库,并获取特定结果(“examenes”字段)。第一次,当用户还没有完成任何表单时,获取的项目是一个 NULL 字段。
$resultado = $mostrarExamen2->fetch(PDO::FETCH_ASSOC);
$respuestasAnteriores = json_decode($resultado['examenes'], true);
当用户提交表单时:
if($_SERVER['REQUEST_METHOD']=='POST'){
for ($i = 0; $i < $cant; $i++) {
$ru = $_POST['respuestaUsuario'][$i];
$respuestasUsuario['examenID'] = $examenID;
$respuestasUsuario['cursoID'] = $cursoID;
$respuestasUsuario['fechaExamen'] = $fechaExamen;
$respuestasUsuario['pregunta'] = $_POST['pregunta'];
$respuestasUsuario['respuestaCorrecta'] = $_POST['rc'];
if ($ru == 'verdadero') {
$respuestasUsuario['respuestaUsuario'][] = 'v';
} else if ($ru == 'falso') {
$respuestasUsuario['respuestaUsuario'][] = 'f';
}
}
//hacemos el cálculo del examen para saber si aprobó o no
$puntaje = 0;
for ($i = 0; $i < $cant; $i++) {
$rc = $respuestasUsuario['respuestaCorrecta'][$i];
$ru = $respuestasUsuario['respuestaUsuario'][$i];
if ($rc == $ru) {
$puntaje++;
}
}
echo '<br>Examen Enviado.<br>';
echo 'Puntaje Obtenido: '.$puntaje.'<br>';
if ($puntaje >= $examen['puntajeTotal']) {
$estado = 'APROBADO';
echo 'Examen APROBADO<br>';
} else {
$estado = 'DESAPROBADO';
echo 'Examen DESAPROBADO<br>';
}
$respuestasUsuario['puntaje'] = $puntaje;
$respuestasUsuario['estado'] = $estado;
$total[] = $respuestasAnteriores;
$total[] = $respuestasUsuario;
问题是$respuestasAnteriores 已经是一个数组,并且其中已经有多个元素,添加到它的下一个元素会破坏结构。
【问题讨论】:
-
$total[] 应该可以工作,我们需要您的更多代码来回答。尝试使用 array_push 但它应该是相同的。
-
所以如果你这样做 $respuestasAnteriores[] = json_decode($resultado['examenes'], true);它会正常工作,但数组级别无用??