Estoy usando una variable $ _SESSION para almacenar códigos de error en una aplicación que estoy creando. En mi página de procesamiento de formularios, estoy usando el siguiente código (como ejemplo):

session_start();
$_SESSION['site_msg']   = array();
if(1 == 1) {
    $_SESSION['site_msg'] = 18;
}
if(2 == 2) {
    $_SESSION['site_msg'] = 21;
}
if(3 == 3) {
    $_SESSION['site_msg'] = 20;
}

Espero usar una función para obtener los valores de la matriz para usar en otra parte de mi código.

function error_code() {
    foreach($_SESSION['site_msg'] as $value) {
        echo "Value: $value <br />";
    }
}

Lo anterior da un error; Advertencia: argumento no válido proporcionado para foreach () ...

Si escribo la función así:

$array[] = $_SESSION['site_msg'];
foreach($array  as $value) {
echo  "VAL: " . $value;
}

Solo me da el último valor, 20.

¿Alguien tiene una idea de dónde me equivoqué? ¡Gracias!

-2
Rick 27 dic. 2019 a las 09:01

2 respuestas

La mejor respuesta
<?php
session_start();
$_SESSION['site_msg']   = array();
if(1 == 1) {
    array_push($_SESSION['site_msg'],18);   // '=' overwrites the data, so push data in session array not to assign
}
if(2 == 2) {
    array_push($_SESSION['site_msg'],21);
}
if(3 == 3) {
    array_push($_SESSION['site_msg'],20);
}


$array = $_SESSION['site_msg'];  //remove [] from variable, its not needed
foreach($array  as $value) {
    echo  "VAL: " . $value;
}
?>
1
Riddhi Rathod 27 dic. 2019 a las 06:30

¡Declaras tu variable $_SESSION['site_msg'] como una matriz, pero pasas valores enteros a esta variable! Debe agregar sus valores como nuevos elementos de matriz.

Esto debería funcionar:

session_start();
$_SESSION['site_msg']   = array();
if(1 == 1) {
    $_SESSION['site_msg'][] = 18;
}
if(2 == 2) {
    $_SESSION['site_msg'][] = 21;
}
if(3 == 3) {
    $_SESSION['site_msg'][] = 20;
}

Como alternativa, puede usar la función array_push() para agregar sus valores a la matriz:

session_start();
$_SESSION['site_msg']   = array();
if(1 == 1) {
    array_push($_SESSION['site_msg'], 18);
}
if(2 == 2) {
    array_push($_SESSION['site_msg'], 21);
}
if(3 == 3) {
    array_push($_SESSION['site_msg'], 20);
}
1
CodyKL 27 dic. 2019 a las 06:33