【问题标题】:How to add an associative array as a single new item into an already existing array?如何将关联数组作为单个新项添加到现有数组中?
【发布时间】: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);它会正常工作,但数组级别无用??

标签: php mysql arrays json


【解决方案1】:
$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);

【讨论】:

    【解决方案2】:

    你唯一需要做的就是:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      相关资源
      最近更新 更多