Ошибка при цикле многодимезионного массива внутри 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 />
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
Я думаю, что вы должны поставить echo $value[0], чтобы получить $id и echo $value[1], чтобы получить $lap
Исправьте это так, я не знаю, правильно ли это, но это работает ... давайте посмотрим, как я:
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]) . ' ';
}
}
}