如何访问数组内的对象

时间:2019-03-19 15:31:52

标签: php

我有这个小代码:

$user = Database::getInstance()->query("SELECT username FROM users");
if ($user->count()) {
    foreach ($user as $users) {
        echo $users->username;
    }
}
var_dump($users);die();

这给了我一个错误:

Notice: Trying to get property 'username' of non-object in C:\xampp\htdocs\finaltask\test.php on line 8
array(2) { [0]=> object(stdClass)#5 (1) { ["username"]=> string(10) "reinisk157" } [1]=> object(stdClass)#6 (1) { ["username"]=> string(9) "reinisk22" } }

如果我理解正确,我试图从数组中检索对象,但是我不知道如何从数据库中获取该数据。如果您需要更多详细信息,请告诉我。

4 个答案:

答案 0 :(得分:1)

这里存在一些范围和命名问题,可能会使您感到困惑。

foreach的范围

foreach($list as $item) {
    // ... do something
}
echo $item;

循环遍历列表/数组时,循环的最后一项在循环之后仍然可用。这就是为什么转储看起来像它的原因,因为您正在转储错误的东西。

$userResult = Database::getInstance()->query("SELECT username FROM users");
if ($userResult->count()) {
    foreach ($userResult as $user) {
        echo $user->username;
    }
}
var_dump($userResult);die();

答案 1 :(得分:1)

先使用$usersResult = $users->fetchAll(PDO::FETCH_OBJ);,然后再使用foreach。

$users = Database::getInstance()->query("SELECT username FROM users");
$usersResult = $users->fetchAll(PDO::FETCH_OBJ);
if ($usersResult->count()) {
    foreach ($usersResult as $user) {
        echo $user->username;
    }
}
var_dump($usersResult);
die();
  

注意:我在解析数据时将$users更改为$user   循环,因为这对于单个用户的数据更有意义。

希望这行得通!

答案 2 :(得分:0)

首先,从语义上讲,使用该查询可以获取用户,而不仅仅是一个用户。对于代码本身而言,这并不重要,但了解它很重要:)

$users = Database::getInstance()->query("SELECT username FROM users");
// I prefer is_null over count(), when a query returns 0 rows turns on null
if (!is_null($users)) {
    foreach($users as $user){
        //Try calling it this way
        echo $user['username'];
    }
}

答案 3 :(得分:0)

感谢所有答案,我也会尝试。我让它起作用的是:

echo $users[0]->username;