这是一个常见的问题,但我无法使用解决方案来处理我正在做的事情。我无法理解回显数组中的值是如何工作的,任何帮助都是值得赞赏的。以下代码;
$sql = 'someQuery';
$dev='someString';
$device = $client->executeSQLQuery(array("sql"=>$sql));
echo "<pre>";
print_r($device);
echo "</pre>";
将产生以下输出;
stdClass Object
(
[return] => stdClass Object
(
[row] => Array
(
[0] => stdClass Object
(
[name] => someString
[userid] => user1
)
[1] => stdClass Object
(
[name] => someString
[userid] => user2
)
)
)
)
这很容易理解。我也明白,为了回显这个输出的内容,我需要使用foreach循环。我正在尝试回显每个userid实例(在输出中出现两次)。
foreach($device as $first)
{
if( is_array($first->row) )
{
$userid = $first->userid;
foreach($userid as $second)
{
echo "<b>UserID</b><br> " . $device->return->row->userid . $
}
}
}
所以,这不起作用,可能是因为我第一次没有以正确的方式学习它。在这种情况下,据我所知,if语句甚至不需要存在,因为我们不需要评估内容是否是一个数组(它不是)。有人可以解释如何通过数组并回显对象userid的每个实例的逻辑吗?
答案 0 :(得分:1)
在您的示例中,row
是一个对象数组。 userid
只是一个对象的属性,它被赋予原始值。你无法迭代这种属性:
foreach($device->return->row as $obj)
{
echo $obj->userid; // this gives 'userid' value
}
如果您将某个数组存储在userid
属性
答案 1 :(得分:1)
注意print_r输出。 $device
是stdClass而不是数组,它有一个名为return
的属性,它也是一个stdClass。再次有一个名为row
的属性,此属性是一个数组。
正如@ derek-pollard所说,你需要这样做:
foreach($device->return->row as $info) {
echo "<b>UserID</b><br> " . $info->userid;
echo "<b>UserName</b><br> " . $info->name;
}
它会起作用,因为$device->return->row
将返回用户数组。对于初学者,foreach将针对每个项目(在数组内)迭代一次,$info
将具有当前项目的内容。
最后它会打印出来:
<b>UserID</b><br> user1
<b>UserName</b><br> someString
<b>UserID</b><br> user2
<b>UserName</b><br> someString