Ошибка при цикле многодимезионного массива внутри php session


Как дела? у меня есть сомнения, я сделал session, чтобы он содержал массив, чтобы затем использовать его, когда я хочу, в нескольких частях моей страницы. вопрос в том, что, желая принести данные из каждого массива внутри этого session, он бросает мне ошибки... с varDump () нет драмы, проблема в том, что я должен вернуть эти данные один за другим в jscript.

function CargarEnCarro($id){

session_start();
$vuelta = "hola";
$producto[]=[$id, $vuelta];
$_SESSION['CarroCompra'][]= $producto;
//var_dump($_SESSION['CarroCompra']);




 for ($i=0; $i <count($_SESSION['CarroCompra']) ; $i++) { 

     for ($j=0; $j < count($_SESSION['CarroCompra'][$i]) ; $j++) { 
         $valor=$_SESSION['CarroCompra'][$i][$j];
         echo $valor;
     }

}


}

Проблема в том, что я хочу проверить его, показав его в консоли, и это дает мне следующую ошибку, прямо в строке Эхо:

<br />
<b>Notice</b>:  Array to string conversion in 
........ on line <b>494</b><br />
Array<br />
Author: GALS, 2018-09-23

3 answers

Вы получаете беспорядок, сохраняя значения в переменной $_SESSION, которая работает как массив.

Например, вы можете сохранить информацию с помощью ключа, который идентифицирует ее. Видимо, вы хотите сохранить внутри $_SESSION другой массив (ы) с двумя элементами.

Более чистым и организованным решением было бы:

  • объявить $producto как массив
  • внутри этого массива сохранить два элемента, один будет идентифицирован ключом id и другой будет идентифицирован ключом texto:
  • затем вы добавляете этот массив ($producto) в свою переменную сеанса. Вы можете добавить столько массивов, сколько вам нужно ...
  • затем вы читаете с помощью простого foreach содержимое переменной сеанса, ища каждый элемент по его ключу.
  • Если ключи были разрозненными, но массив сохраняет одну и ту же структуру, вы можете прочитать информацию с вложенным foreach, как описано в разделе частный случай Подробнее ниже.

Как объяснено, код будет выглядеть так:

$producto=array();
$vuelta = "hola";
$id=1;

$producto['id']=$id;
$producto['texto']=$vuelta;
$_SESSION['CarroCompra'][]= $producto;


foreach ($_SESSION['CarroCompra'] as $row)
{
    echo "id: {$row['id']} - texto: {$row['texto']}".PHP_EOL;
}

Вывод на экран выглядит следующим образом:

id: 1 - texto: hola

Частный случай:

Если массив по какой-либо причине должен иметь разные ключи, например, давайте представим, что он заполнен следующим образом:

$producto=array();
$vuelta = "hola";
$id=1;

$producto['id']=$id;
$producto['texto']=$vuelta;

$vendedor=array();
$vendedor['codigo']="Z-001";
$vendedor['nombre']="Zaqueo";
    
$_SESSION['CarroCompra'][]= $producto;
$_SESSION['CarroCompra'][]= $vendedor;

Вы можете сделать чтение следующим образом:

foreach ($_SESSION['CarroCompra'] as $subarray)
{
    if (is_array($subarray))
    {
        foreach ($subarray as $k=>$v)
        {
            echo "$k:  $v ".PHP_EOL;
        }
        echo PHP_EOL;   
    }
}

В этом случае вывод будет выглядеть примерно так:

id:  1 
texto:  hola 

codigo:  Z-001 
nombre:  Zaqueo 
 1
Author: A. Cedano, 2020-06-11 10:54:57

Я думаю, что вы должны поставить echo $value[0], чтобы получить $id и echo $value[1], чтобы получить $lap

 0
Author: F. Villate, 2018-09-23 17:26:08

Исправьте это так, я не знаю, правильно ли это, но это работает ... давайте посмотрим, как я:

  for ($i=0; $i <count($_SESSION['CarroCompra']) ; $i++) { 

      for ($j=0; $j <count($_SESSION['CarroCompra'][$i]) ; $j++) { 

          for ($k=0; $k < count($_SESSION['CarroCompra'][$i][$j]); $k++) { 
            echo ($_SESSION['CarroCompra'][$i][$j][$k]) . ' ';
        }
   }

}
 0
Author: GALS, 2018-09-23 17:40:11