我正在尝试以一种简洁的格式构建一个PHP会话数组,但似乎无法理解。
这是我的代码:
$user_id = ($_GET['user_id']);
$user_name = ($_GET['user_name']);
if (!isset($_SESSION['people'])) {
$_SESSION['people']=array();
}
$_SESSION['people'][$user_id]=array();
$people[$user_id]['id'] = $user_id;
$people[$user_id]['name'] = $user_name;
array_push($_SESSION['people'][$user_id],$people);
这是我想要的输出:
Array
(
[people] => Array
(
[32] => Array
(
[id] => 32
[name] => Jane Doe
)
)
)
但这就是上面的代码给我的:
Array
(
[people] => Array
(
[32] => Array
(
[0] => Array
(
[32] => Array
(
[id] => 32
[name] => Jane Doe
)
)
)
)
)
所以我得到的是额外的[0]和额外的[32]。我正在尝试获取这些密钥,因为它们是user_id的密钥,因此我可以在需要它们时获取值,并将其用于从会话中删除之类的事情。
我尝试过以各种组合构建层次结构,但似乎无法破解这一层次。
请注意,这是用于购物车类型的东西。我正在使用push,因此可以不断将更多内容添加到列表中。
答案 0 :(得分:3)
首先,为什么要在$ _GET ['user_id']周围使用括号?
但是为了帮助您,数组中的这些其他ID是由于您将带有键32(用户ID)的数组推入用户密钥的session [people]数组而造成的,基本上在它们之间创建了另一个数组。 为了简化过程并允许您通过user_id访问它,您只需执行以下操作:
<?php
$user_id = ($_GET['user_id']);
$user_name = ($_GET['user_name']);
if (!isset($_SESSION['people'])) {
$_SESSION['people'] = array();
}
$_SESSION['people'][$user_id] = [
'id' => $user_id,
'name' => $user_name
];
通过这种方式,您可以直接将用户数据分配给以user_id为键的SESSION,而无需按下:)
答案 1 :(得分:1)
您两次创建相同的数组(用户ID),然后将它们推在一起。
$_SESSION['people'][$user_id]=array(); // first time
$people[$user_id]['id'] = $user_id;// second time.
然后将它们推在一起。仅创建一次,然后按下。
$_SESSION['people'][$user_id]=array();
$people['id'] = $user_id;
$people['name'] = $user_name;
array_push($_SESSION['people'][$user_id],$people);
答案 2 :(得分:0)
只需用此替换您的阵列推送,就可以了。
$_SESSION['people'][$user_id] = $people[$user_id];
Array push完全按照它说的去做,它将某些东西推入(读取附加)到现有数组中。在这种情况下,您需要再次推送由user_id索引的数组。