PHP数组-太多级别

时间:2018-08-21 20:07:10

标签: php arrays

我正在尝试以一种简洁的格式构建一个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,因此可以不断将更多内容添加到列表中。

3 个答案:

答案 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索引的数组。