【问题标题】:Iterating through a $_session array遍历 $_session 数组
【发布时间】:2019-03-06 17:38:04
【问题描述】:

我已经创建了一个会话数组,如下所示

$_SESSION['memberInfo']['memberFirstName'] = ($first_name);
$_SESSION['memberInfo']['memberLastName'] = ($surname);
$_SESSION['memberInfo']['hash'] = ($hash);
$_SESSION['memberInfo']['templateSrc'] = ($newTemplateSrc);

在我尝试从数组中获取值的其他页面中,我尝试了 foreach 和 while 循环但没有成功,我可以在 var_dump 中看到数组

var_dump($_SESSION['memberInfo']);

在控制台中显示为

array(4) {
  ["memberFirstName"]=>
  string(8) "Geoffrey"
  ["memberLastName"]=>
  string(6) "Turner"
  ["hash"]=>
  string(60) "$2y$10$YBE1tc.BK7yq6bBr/JAlWuN0H8xGdoNSAWzU4/zfd1r3v7jprNBD2"
  ["templateSrc"]=>
  string(61) "../userDirectory/558386500/html/Geoffrey_Turner_558386500.php"
}

在我尝试迭代我尝试使用的数组的页面中

foreach ($_SESSION['memberInfo'] as $name)
{
$first_name = $name['memberFirstName'];
}

我得到的回复显示为

警告:非法字符串偏移 'memberFirstName'

我认为这表明迭代正在读取一个空数组

我可以使用

回显数组
foreach ($_SESSION['memberInfo'] as $key => $val) {
    echo "$key = $val\n";
}

导致

memberFirstName = Geoffrey
memberLastName = Turner
hash = $2y$10$YBE1tc.BK7yq6bBr/JAlWuN0H8xGdoNSAWzU4/zfd1r3v7jprNBD2
templateSrc = ../userDirectory/558386500/html/Geoffrey_Turner_558386500.php

但对于我来说,我似乎无法弄清楚如何单独获取每个数组值并将它们分配给一个变量

【问题讨论】:

  • 变量$_SESSION['memberInfo'] 是一个数组,如您使用var_dump 所示。 foreach 将像往常一样向下迭代该数组。您询问数组的“价值”一侧,但将其称为$name。要获取 $name 和 $value 您需要执行的操作:$_SESSION['memberInfo'] as $name => $value.
  • @ Ryan Vincent 我确实尝试过,因为在 echo 中我可以看到使用 $key => $value 的对,我只是不知道如何单独获取它们并分配给变量

标签: php arrays session


【解决方案1】:

您的 foreach 没有任何意义,因为您循环尝试分配单个变量太多次而没有任何好处。所以这个要删除:

foreach ($_SESSION['memberInfo'] as $name =) {
    $first_name = $name['memberFirstName'];
}

你只需要:

$first_name = $_SESSION['memberInfo']['memberFirstName'];

【讨论】:

    【解决方案2】:

    如何分别获取每个数组值并将它们分配给变量

    您可以使用extract 提取每个值并将其分配给一个变量。

    extract($_SESSION['memberInfo']) 这应该创建以下变量

    $memberFirstName$memberLastName$hash$templateSrc

    这是一个演示http://ideone.com/XYpC7n

    【讨论】:

    • 虽然在技术上是正确的,但这是一种相当糟糕的方法,因为突然间你会“不知从何而来”获得一堆新变量。直接从数组中取数据更安全,代码更清晰。
    • 它可以工作,虽然就像它已经提到的那样,就好像创建的变量在以太中可以这么说
    • @MarcinOrlowski,你是对的。但是,在注意到 OP 在memberInfo 下的会话中维护一个数组后,我仍然建议使用这种方法作为答案。所以我假设进入memberInfo 的数据是预期的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    相关资源
    最近更新 更多