如何访问数组中成员/元素的对象(stdClass Object)的属性?

46

对我的数组使用print_r(),我得到以下结果:

Array ( 
    [0] => 
        stdClass Object 
        ( 
            [id] => 25 
            [time] => 2014-01-16 16:35:17 
            [fname] => 4 
            [text] => 5 
            [url] => 6 
        ) 
)

如何访问数组中特定的值?以下代码由于stdClass对象而无法正常工作。

echo $array['id'];

19
echo $array[0]->id; - Mark Baker
http://stackoverflow.com/questions/12277268/php-how-to-access-array-element-values-using-array-index - Avinash Babu
5个回答

94

要访问数组成员,您可以使用$array['KEY'];

要访问对象成员,您可以使用$obj->KEY;

要访问对象数组中的对象成员:
$array[0] // 获取数组中的第一个对象
$array[0]->KEY // 然后访问其键

您还可以像这样循环遍历对象数组:

foreach ($arrayOfObjs as $key => $object) {
    echo $object->object_property;
}

把数组看作是一堆东西的集合。它就像一个袋子,你可以把自己的东西放进去并赋予它们一个唯一的标识符(键),然后使用该键访问它们(或从袋子里取出东西)。我想在这里保持简单,但是这个袋子也可以包含其他袋子 :)

更新(这可能有助于某人更好地理解):

数组包含“key”和“value”对。为数组成员提供一个键是可选的,在这种情况下它会自动分配一个数字键,从0开始递增,每增加一个成员就会继续递增1。我们可以通过它的“key”从数组中检索“value”。

因此,我们可以按照以下方式定义数组(关于键):

第一种方法:

$colorPallete = ['red', 'blue', 'green'];

上述数组将自动分配数字键。因此,红色分配的键为0,蓝色为1,依此类推。

从上述数组获取值:

$colorPallete[0]; // will output 'red'
$colorPallete[1]; // will output 'blue'
$colorPallete[2]; // will output 'green'

第二种方法:

$colorPallete = ['love' => 'red', 'trust' => 'blue', 'envy' => 'green']; // we expliicitely define the keys ourself.

从上述数组中获取值:

$colorPallete['love']; // will output 'red'
$colorPallete['trust']; // will output 'blue'
$colorPallete['envy']; // will output 'green'

谢谢,我以为这会是一些简单的东西。 - Alex
嘿,我不明白这里的$value有什么用?是的,我是PHP新手。它是一个新变量吗?我们用它来查找键值吗? - Avinash Babu
@CodeLover 如果我们有一个数组 $a = ['someKey' => 'someValue'];,那么如果您访问 $a['someKey'],将返回 someValue。当我们使用 foreach 循环时,可以访问数组的每个成员的键和值。 - Lucky Soni
@LuckySoni 嘿,我知道了。但是我想知道 echo $value->KEY 是什么意思。当我在代码中尝试时,它没有输出任何内容。 - Avinash Babu
@CodeLover 在上面的答案中,$value 是一个“对象”。我们使用“对象->key”符号来访问“对象”上的“key”。希望这样说得清楚。 - Lucky Soni
1
如何将$key与字符串进行比较? - Carlos Montiel

28

试一下,正常工作 -

$array = json_decode(json_encode($array), true);

1
谢谢!为什么添加 true 会转换为数组? - Awena
@Awena 是的,它是用于返回数组的。例如 - json_decode('{"foo":"bar"}', true); 返回数组 array("foo" => "bar"); - Rohit Suthar

13

试试这个:

echo $array[0]->id;

1
“尝试这个”类型的回答在StackOverflow上价值不高,因为它们对于教育提问者和未来读者几乎没有什么帮助。请努力改进您的回答,无论解决方案的简单程度如何。 - mickmackusa
我给这个答案点了赞,但我同意@mickmackusa的观点,"试试这个"的回答在Stack Overflow上的价值非常低,坦率地说,我希望S.O.能禁止这样的回答。请至少给出一些关于你提出的解决方案的解释,即使只有一句话也足够了。 - Eight Lives
我从不使用仅代码的答案,因为那会传达错误的信息,即仅凭一小段代码就可以获得“独角兽”点数。让 Stack Overflow 变得更好的方法是只支持优质内容。@Eight - mickmackusa

3

您有一个数组。PHP数组基本上是“事物列表”。 您的数组中只有一件事。 那个东西是一个标准类。 您需要将此事物从数组中删除。

$object = array_shift($array);
var_dump($object->id);

或者根据其在数组中的索引来引用该项。

var_dump( $array[0]->id );

或者,如果您不确定数组中有多少个元素,请循环遍历该数组

foreach($array as $key=>$value)
{
    var_dump($value->id);
    var_dump($array[$key]->id);
}

0

这样怎么样?

function objectToArray( $object ){
   if( !is_object( $object ) && !is_array( $object ) ){
    return $object;
 }
if( is_object( $object ) ){
    $object = get_object_vars( $object );
}
    return array_map( 'objectToArray', $object );
}

并使用您的对象调用此函数

$array = objectToArray( $yourObject );

参考资料


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接