0

我正在努力解决这个问题。我以前使用过数组,但我似乎在 PHP 中遇到了困难。相信我,我已经在这里和其他地方查看过问题,所以我提前为这个问题可能是多么基本而道歉。我想做的是制作一个数组的数组???

基本上,我正在尝试创建一个会话全局变量,以便它存储一个数组并且可以不断添加。

$_SESSION['school'] = array('events' => array());

事件数组的示例是:

events['name'] = 'Homecoming';
events['date'] = 'December 15, 2012';
events['cost'] = 18.00;
events['attending'] = array();
events['attending'][$i] = 'John'

那么用途将是

echo $_SESSION['school'][$i][events]['name']; 
echo $_SESSION['school'][$i][events]['date']; 
echo $_SESSION['school'][$i][events]['cost'];

...

我已经尝试如上所述创建它并像这样填充(再次是一个事件数组)

$_SESSION['school'] = array('events' => array());

$_SESSION['school'][$i][events]['name'] = 'Homecoming';
$_SESSION['school'][$i][events]['date'] = 'December 15, 2012';
$_SESSION['school'][$i][events]['cost'] = 18.00;
$_SESSION['school'][$i][events]['people'] = array('jane', 'john', 'bill');

这似乎不起作用,因为我可以告诉计数正在增加,因为它正在被填充。我尝试了其他一些方法,但由于某种原因我无法弄清楚。我遇到的大多数例子似乎与我正在尝试做的事情并不相似。任何帮助将不胜感激。

--------基于反馈的更新问题--------我想我非常接近理解你更新的逻辑,我尝试更新我的代码,但我遇到了以下问题. 我有一个初始化 php 脚本,它设置 $_SESSION['school'] = array(array());。直到稍后才会填充它,并且有一次我用计数检查了 $_SESSION['school']。即使没有添加任何内容,它也始终在初始检查中返回 1。但是,我认为它是因为它包含一个空数组。所以这让我质疑结构。由于我是一个视觉型的人,这就是我认为我需要的,但我不知道如何构建它。

//would be an 1 dimensional array that empty until a school is added later on in code.
$_SESSION['school'] = array();

它的元素将包含一个包含元素的多维数组

['name'] = 'Johnson High';
['address'] = '121 elm';
['city'] = 'san jose';
['state'] = 'California';
['events'] = array();

['events'] 在添加事件之前为空,但这里有一些项目将包含

['events']['name'] = 'homecoming';
['events']['date'] = 'December 15, 2012';
['events']['cost'] = '18.00';

最后 $_SESSION['school'] 可以容纳 1 到我可以循环通过的许多学校。

现在对于我对 danL 更新逻辑的误解,我看不到名称和事件如何具有相同的索引?当我查看代码时,我感觉 $_SESSION['school'] 看起来像这样

$_SESSION['school']{ 'name' => 'Johnson High',
                     'events' => array('basketball', 'soccer', 'football'),
                     'name' => 'West Forsyth High',
                     'events' => array('basketball', 'soccer', 'football')};

如果是这种情况,那么每个元素都位于不同的索引处。我必须在这里遗漏一些基本的东西。我一直在努力阅读并与我做错的事情联系起来。我想我只是从错误的角度看待问题。

4

2 回答 2

2

如果它不是数字键,则需要将键放在引号中,如下所示:

$_SESSION['school']['events']['name'] = 'Homecoming';

但是,如果你想做一些像你在这里做的事情:

echo $_SESSION['school'][$i]['events']['name'];

那么你需要像这样声明你的 $_SESSION['school'] 变量:

$_SESSION['school'] = array(array('events' => array()));

如果您注意到,您声明 $_SESSION['school'] 数组的方式只有 3 个维度,但您尝试在使用 $i 变量引用内部索引的部分中访问 4 个维度数组。

更新:这是您将事件添加到空学校数组的方式

$_SESSION['school'] = array(array());
$_SESSION['school'][]['name'] = 'Johnson High';
$_SESSION['school'][]['events'] = array('basketball', 'soccer', 'football');
$_SESSION['school'][]['name'] = 'West Forsyth High';
$_SESSION['school'][]['events'] = array('theater', 'football', 'lacrosse');

然后你可以像这样遍历它们:

for($i = 0; $i < sizeof($_SESSION['school']); $i++) {
   echo 'School name: ' . $_SESSION['school'][$i]['name'] . '<br />';
   echo 'Events:<br />';
   foreach($_SESSION['school'][$i]['events'] as $event) {
      echo $event . '<br />';
   }  
   echo '<br />';
}

这将输出:

School name: Johnson High
Events:
basketball
soccer
football

School name: West Forsyth High
Events:
theater
football
lacrosse

我希望这就是你所要求的。抱歉,如果我不完全了解您要达到的目标。

于 2012-12-29T05:43:39.793 回答
0

好的,所以基于 danL 的帮助(非常感谢)。我已经弄清楚我需要做什么。所以在我设置的初始化脚本中,

$_SESSION['school'] = array();

经过进一步处理后,我创建了一个事件数组来存储信息。

$event = arra();
$event['name'] = 'Homecoming';
$event['date'] = 'December 15, 2012';
$event['cost'] = '18.00';
$event['people'] = array();
$event['people'] = { 'john', 'mary', 'mark', 'janice'};

最后两行可能会合并为一行。

然后我将事件数组添加到学校数组中,

$_SESSION['school'][] = $event;

我不知道如何使用关联数组如此轻松地旋转,但感谢所有帮助。

于 2012-12-29T16:31:34.493 回答