2011-11-07 89 views
1

我想从对象中的多维数组访问元素。例如,我们假设有一个Foo类有一个名为$ phone的变量,代表多维数组。访问使用未知键的嵌套关联数组

$phone -> structure will look like 
Array { 
    "home" Array(1) {[0] = "555-1212"}, 
    "work" Array(2) {[0] = "555-1234", [1] = "555=5434"}, 
    "other" Array(1) {[0] = "555=9090"} 
} 

注意:我们不能假设我们知道密钥。

我可以给明确的键,即进入一个值,

$foo->phone["home"][0] 

的问题出现时,我并没有明确知道密钥和从其他地方拉他们。 例如,如果$类型=“手机”,$亚型=“家”,我想第一个条目我就想到用:

$object->$type[$subtype][0] 

获得的价值,但我得到一个错误,它不不认为这是一个数组。我不确定错误在哪里。

接下来就是将元素添加到最低级别的数组中。我想下面的工作,但不会:

array_push($object->$type[$subtype], $value) 

这mutidimensional阵列,让我来存储密钥在一个嵌套结构标记的电话号码。如果这太复杂了,请告诉我。我选择这种结构的原因是因为这些键可以是用户定制的任何东西。

谢谢。

+0

当你说; '钥匙可以是用户定制的任何东西',你是说他们用来提交这些信息的形式允许他们设置钥匙吗? –

+0

是的。会有一些其他方法允许用户创建密钥。例如“家庭传真”,然后为其添加一个或多个数字。它意味着像Apple的地址簿一样工作。我可以为电话号码添加自定义字段并通过自己的密钥进行定义。 – user1034603

回答

1

我相信,如果您将$ object - > $ type保存为自己的变量,那么这将起作用,然后访问该变量以更深入数组。

+0

这似乎并没有做到。欲了解更多信息,这里是我如何尝试创建结构,这也是行不通的...抱歉的格式。 'while($ row = mysql_fetch_array($ result)){ $ type = $ this - > $ row ['type'];如果(!array_key_exists($ row ['title'],$ type)){ $ type [$ row ['title']] = array()检查此对象是否存在于对象数组 中, ; ($ type ['title')])){ array_push($ type [$ row ['title']],$ r) } }' – user1034603

+0

不应该是'$ type = $ row ['type'];'?否则将$ row ['type']保存到一个var:'$ rowType = $ row ['type']; $ type = $ this - > $ rowType;' –

+0

看起来这是正确的方向。数组中有东西。为什么我需要为结构中的每个级别生成一个变量?为什么我不能像'$ this - > $ row ['type'] [$ row ['title']]''做些什么? – user1034603