PHP多维数组

时间:2012-12-29 05:38:31

标签: php

我正在试图让我的思绪围绕着这个。我曾经使用过数组,但我似乎在PHP中苦苦挣扎。相信我,我已经在这里和其他地方查看了问题,所以我为这个问题的基本概率提前道歉。我要做的是创建一个数组的数组???

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

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

events数组的例子是:

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')};

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

2 个答案:

答案 0 :(得分: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

我希望这就是你所要求的。对不起,如果我不明白你想要达到的目的。

答案 1 :(得分: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;

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