【发布时间】:2014-06-27 18:00:06
【问题描述】:
我正在使用 foreach 构造来查看从函数返回的数组。不幸的是,如果只有 1 个结果,则此函数返回不同的结构,而不是有超过 1 个结果。当有一个结果时,我得到以下信息:
array(3) {
["name"]=>
string(5) "chris"
["admin"]=>
string(5) "chris"
["time"]=>
string(19) "2014/06/27 12:36:31"
}
string(34) "$1$9243ujf0i2j8ehdf24hdf9a8"
我正在尝试获取 ["name"] 值。如果我使用以下代码,我的变量有正确的数据,但我得到一个非法字符串偏移错误:
foreach($res[1]['result']['user']['entry'] as $user) {
$s = $user['name'];
echo $s;
}
如何正确获取数组["name"] 值?还是我必须在更高的层次上做一些不同的事情?当有一个条目时,我得到的原始数据如下:
array(2) {
["@attributes"]=>
array(2) {
["status"]=>
string(7) "success"
["code"]=>
string(2) "19"
}
["result"]=>
array(2) {
["@attributes"]=>
array(2) {
["total-count"]=>
string(1) "1"
["count"]=>
string(1) "1"
}
["user"]=>
array(2) {
["@attributes"]=>
array(2) {
["admin"]=>
string(5) "chris"
["time"]=>
string(19) "2014/06/27 12:39:58"
}
["entry"]=>
array(2) {
["@attributes"]=>
array(3) {
["name"]=>
string(5) "chris"
["admin"]=>
string(5) "chris"
["time"]=>
string(19) "2014/06/27 12:36:31"
}
["phash"]=>
string(34) "$1$9243ujf0i2j8ehdf24hdf9a8"
}
}
}
}
当有多个条目时如下:
array(2) {
["@attributes"]=>
array(2) {
["status"]=>
string(7) "success"
["code"]=>
string(2) "19"
}
["result"]=>
array(2) {
["@attributes"]=>
array(2) {
["total-count"]=>
string(1) "1"
["count"]=>
string(1) "1"
}
["user"]=>
array(2) {
["@attributes"]=>
array(2) {
["admin"]=>
string(5) "chris"
["time"]=>
string(19) "2014/06/27 12:57:32"
}
["entry"]=>
array(2) {
[0]=>
array(2) {
["@attributes"]=>
array(3) {
["name"]=>
string(5) "chris"
["admin"]=>
string(5) "chris"
["time"]=>
string(19) "2014/06/27 12:36:31"
}
["phash"]=>
string(34) "$1$9243ujf0i2j8ehdf24hdf9a8"
}
[1]=>
array(2) {
["@attributes"]=>
array(3) {
["name"]=>
string(4) "test"
["admin"]=>
string(5) "chris"
["time"]=>
string(19) "2014/06/27 12:57:32"
}
["phash"]=>
string(34) "$1$as9d8jf238r9jf89j9238jr"
}
}
}
}
}
注意 ["entry"] 之后的额外索引数组级别。基本上,我只想要 ["name"] 值的列表。
【问题讨论】:
-
我很确定你想要
foreach($res[1]['result']['user']['entry']['@attributes'] as $user)。它们都在该子数组中保存name位。 -
并非如此。再看结构,划分是在入口之后。
-
@Anthony:谢谢,但这行不通。当有多个条目时,那里有一个额外的数组级别:$res[1]['result']['user']['entry'][0]['@attributes']。当只有一个条目时,它只是 $res[1]['result']['user']['entry']['@attributes']。
-
我完全错过了条目拆分为数组的位置。但是,如果您不将
@attributes添加到任一路径,则会出现非法偏移。数组从何而来? -
@Anthony:请参阅下面我对 this.lau_ 的回答的评论。
标签: php