【问题标题】:cannot store in multidimensional session array不能存储在多维会话数组中
【发布时间】:2017-05-29 12:08:11
【问题描述】:

如果我在 $_SESSION['breadcrumb']['category'] 中保存一个字符串,它会成功保存该字符串,但如果我尝试在 $_SESSION['breadcrumb']['category'][ 中保存相同的字符串'shiv'] 它会引发以下错误

警告:非法字符串偏移 'shiv' in E:\wamp\www\sugumar\mysuite\ajaxjobsearch.php 在第 13 行

这是有效的

 $_SESSION['breadcrumb']['category']="<a href={$sitepath}/jobs?removefromsearch&name=category&id={$id}>$value</a>" ;//works fine

这不起作用..

$_SESSION['breadcrumb']['category']['shiv'] ="<a href={$sitepath}/jobs?removefromsearch&name=category&id={$id}>$value</a>" ; //error

我想保存 $id 而不是 shiv

$_SESSION['breadcrumb']['category'][$id] ="<a href={$sitepath}/jobs?removefromsearch&name=category&id={$id}>$value</a>" ;

【问题讨论】:

  • $_SESSION['breadcrumb']['category'] 已经是一个字符串了。
  • $_SESSION['breadcrumb']['category'] 指的是已经存在的字符串。 $_SESSION['breadcrumb']['category']['shiv']not 定义的,因此是错误的。两个变量的var_dump() 应显示差异。
  • 我认为重复链接不合适。请考虑收回它。
  • @CarlosAlexandre:如果我可以问的话,这个问题是怎么重复的?

标签: php arrays session multidimensional-array


【解决方案1】:

因为您的深层category 值首先是一个字符串,所以当您尝试使用[anything] 访问它时,它正在尝试访问该字符串的offset。这是一个例子:

$_SESSION['breadcrumb']['category']='<a href={$sitepath}/jobs?removefromsearch&name=category&id={$id}>$value</a>';
echo $_SESSION['breadcrumb']['category'][0];

这将输出&lt;,因为这是偏移量 0 处的字符(第一个字符)。

事实是 shiv 不是合法的偏移量,所以 php 会发出警告,然后拼命尝试做你要求它做的事情......它会将 shiv 转换为 0 并替换character 的值&lt; 的第一个字符与shiv 的值&lt; 的第一个字符(无明显变化)


当偏移量为有效数字时,可以用它来替换字符串中的一个字符:

$_SESSION['breadcrumb']['category']='<a href={$sitepath}/jobs?removefromsearch&name=category&id={$id}>$value</a>';//works fine
$_SESSION['breadcrumb']['category'][0]='!';
echo $_SESSION['breadcrumb']['category'];

输出:!a href={$sitepath}/jobs?removefromsearch&amp;name=category&amp;id={$id}&gt;$value&lt;/a&gt;


这应该足以解释错误。

正如其他人所说,这只是将圆钉钉入方孔的问题。要更正此问题,只需在您发布的第一行代码中在 ['category'] 之后声明一个键,以便 category 是子数组的键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 2015-06-12
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多