我有对象:
object(stdClass)#6 (4) {
[0]=> object(stdClass)#3 (2) {
["name"]=> string(3) "Jan"
["job"]=> string(2) "IT"
}
[1]=> object(stdClass)#2 (2) {
["name"]=> string(4) "Adam"
["job"]=> string(2) "PR"
}
[2]=> object(stdClass)#4 (2) {
["name"]=> string(6) "Wojtek"
["job"]=> string(2) "IT"
}
[3]=> object(stdClass)#5 (2) {
["name"]=> string(6) "Marcin"
["job"]=> string(3) "Car"
}
}
我的问题是:如何使用该对象:
object(stdClass)#3 (2) {
["name"]=> string(3) "Jan"
["job"]=> string(2) "IT"
}
该对象在类中。
类似这样的事情:$this->object->object
或$this->object->0
不起作用。
但是当我将索引号从“ 0”或“ 1”更改为“ A”或“ B”时,
答案 0 :(得分:0)
您可以使用以下代码将多个数组转换为对象:
$obj1 = (object) ['name' => 'Jan', 'job' => 'IT'];
$obj2 = (object) ['name' => 'Adam', 'job' => 'PR'];
$obj3 = (object) ['name'=> 'Wojtek', 'job' => 'IT'];
$obj4 = (object) ['name' => 'Marcin', 'job' => 'Car'];
$obj = (object) [$obj1, $obj2, $obj3, $obj4];
要获取第一个对象的name
,可以将该对象转换为数组(PHP <7.2解决方案):
echo ((array) $obj)[0]->name; // Jan
echo ((array) $obj)[1]->name; // Adam
从PHP 7.2开始,您还可以访问数字属性名称:
echo $obj->{0}->name; // Jan
echo $obj->{1}->name; // Adam
完整示例(包含演示):
$obj1 = (object) ['name' => 'Jan', 'job' => 'IT'];
$obj2 = (object) ['name' => 'Adam', 'job' => 'PR'];
$obj3 = (object) ['name'=> 'Wojtek', 'job' => 'IT'];
$obj4 = (object) ['name' => 'Marcin', 'job' => 'Car'];
$obj = (object) [$obj1, $obj2, $obj3, $obj4];
//your output
var_dump($obj);
//PHP < 7.2: get the output of the name of the first object.
echo 'Test: '.((array) $obj)[0]->name; // Jan
//or since PHP 7.2
echo $obj->{0}->name; // Jan
答案 1 :(得分:0)
名称为数字的对象属性实际上是无效的。可以通过某些操作创建它们是一个长期存在的错误。
此错误最终在PHP 7.2中修复; 7.2.0 changelog列出了此更改所修复的几个错误报告,并链接到the RFC which proposed the new behaviour。
您可以看到区别in this demo:
$obj = (object)[1,2,3];
var_dump($obj);
var_dump($obj->{"0"});
在PHP 7.2之前,这会产生一个与您拥有的对象类似的对象,并且无法访问该属性:
object(stdClass)#1 (3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
Notice: Undefined property: stdClass::$0 in /in/tfbH0 on line 6
NULL
在7.2之后,它会产生一个完全不同的对象,其中的属性名称都是字符串,而不是整数,并且可以使用->{"name"}
语法进行访问:
object(stdClass)#1 (3) {
["0"]=>
int(1)
["1"]=>
int(2)
["2"]=>
int(3)
}
int(1)
如果您无法升级PHP,我所知道的唯一解决方法是:
(array)$object
将其强制转换回数组。