如何将关联数组作为单个新项添加到现有数组中?

时间:2016-10-04 15:16:55

标签: php mysql arrays json

我的网站上有表格,其中有一些问题供用户填写。 提交每个表单后,所有提交的信息都会添加到关联数组中。

之后,我将该数组编码为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已经是一个数组,并且它已经有多个元素,下一个元素会加入到它中。

2 个答案:

答案 0 :(得分:0)

$array = array();

array_push($array, $array1, $array2);

像这样:     

$array = array();

$array1 = array(
    'something' => 'somthing',
    array(
        'something' => 'somthing',
        array('something' => 'somthing'),
        array('something' => 'somthing'),
        array('something' => 'somthing')
    ),
    'something' => 'somthing'
);

$array2 = array(
    'somewhere' => 'somewhere',
    array(
        'somewhere' => 'somewhere',
        array('somewhere' => 'somewhere'),
        array('somewhere' => 'somewhere'),
        array('somewhere' => 'somewhere')
    ),
    'somewhere' => 'somewhere'
);

array_push($array, $array1, $array2);

print_r($array);

?>

<强>输出:

Array
(
    [0] => Array
        (
            [something] => somthing
            [0] => Array
                (
                    [something] => somthing
                    [0] => Array
                        (
                            [something] => somthing
                        )
                    [1] => Array
                        (
                            [something] => somthing
                        )
                    [2] => Array
                        (
                            [something] => somthing
                        )
                )
        )
    [1] => Array
        (
            [somewhere] => somewhere
            [0] => Array
                (
                    [somewhere] => somewhere
                    [0] => Array
                        (
                            [somewhere] => somewhere
                        )
                    [1] => Array
                        (
                            [somewhere] => somewhere
                        )
                    [2] => Array
                        (
                            [somewhere] => somewhere
                        )
                )
        )
)

所以在你的情况下:

$total = array();
array_push($total, $respuestasAnteriores, $respuestasUsuario);

答案 1 :(得分:-3)

您唯一需要做的是:

 $total[] = {$array1, $array2}