回应数组值

时间:2016-01-04 17:51:21

标签: php arrays

这是一个常见的问题,但我无法使用解决方案来处理我正在做的事情。我无法理解回显数组中的值是如何工作的,任何帮助都是值得赞赏的。以下代码;

$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>&nbsp;&nbsp;" . $device->return->row->userid . $
                        }
                }
        }

所以,这不起作用,可能是因为我第一次没有以正确的方式学习它。在这种情况下,据我所知,if语句甚至不需要存在,因为我们不需要评估内容是否是一个数组(它不是)。有人可以解释如何通过数组并回显对象userid的每个实例的逻辑吗?

2 个答案:

答案 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>&nbsp;&nbsp;" . $info->userid;
    echo "<b>UserName</b><br>&nbsp;&nbsp;" . $info->name;
}

它会起作用,因为$device->return->row将返回用户数组。对于初学者,foreach将针对每个项目(在数组内)迭代一次,$info将具有当前项目的内容。

最后它会打印出来:

<b>UserID</b><br>&nbsp;&nbsp;user1
<b>UserName</b><br>&nbsp;&nbsp;someString
<b>UserID</b><br>&nbsp;&nbsp;user2
<b>UserName</b><br>&nbsp;&nbsp;someString