我正在使用foreach构造来查看从函数返回的数组。不幸的是,如果只有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"]值列表。
答案 0 :(得分:1)
根据结果数量返回不同结构的服务将被打破。如果无法修复,您可以尝试对数据进行规范化,然后再进行处理:
if (!isset($res[1]['result']['user']['entry'][1]) {
// Not an array, so change the structure to an array with one element:
$res[1]['result']['user']['entry'] = array($res[1]['result']['user']['entry']);
}
// Now process the data as if the service is always returning an array
答案 1 :(得分:1)
您可以使用is_array
$test = $res[1]['result']['user']['entry'];
if (is_array($test)) {
foreach($test as $user) {
$s = $user['@attributes']['name'];
echo $s;
}
} else {
$s = $test['@attributes']['name'];
echo $s;
}
答案 2 :(得分:1)
您可以像这样标准化entry
数组:
if(!isset($entries['result']['user']['entry'][0])) {
$entry_list[] = $entries['result']['user']['entry'];
} else {
$entry_list = $entries['result']['user']['entry'];
}
然后无忧虑地使用$entry_list
操作新的foreach
数组。