Php 有人知道如何在一行中打印这个数组中的数字200吗?
我试图从这个数组中打印数字200,但我不知道如何使用(对象)强制转换 您不应该盲目地将数组投射到对象,因为这样不安全。PHP在手册中明确警告不要这样做 数组转换为具有由键和相应值命名的属性的对象,数字键除外,除非迭代,否则无法访问数字键 这意味着数组中任何转换到对象的数字键都将变得不可访问。在这种特殊情况下,正在转换的数组中唯一的键恰好是字符串,这意味着Php 有人知道如何在一行中打印这个数组中的数字200吗?,php,arrays,Php,Arrays,我试图从这个数组中打印数字200,但我不知道如何使用(对象)强制转换 您不应该盲目地将数组投射到对象,因为这样不安全。PHP在手册中明确警告不要这样做 数组转换为具有由键和相应值命名的属性的对象,数字键除外,除非迭代,否则无法访问数字键 这意味着数组中任何转换到对象的数字键都将变得不可访问。在这种特殊情况下,正在转换的数组中唯一的键恰好是字符串,这意味着$x->items[2]将给出预期的结果 因此,例如,$x=(object)[1=>100,2=>200]将导致$x[2]和$x[“2”]始终
$x->items[2]
将给出预期的结果
因此,例如,$x=(object)[1=>100,2=>200]
将导致$x[2]
和$x[“2”]
始终为空,尽管变量转储($x)
另有显示。这可能是偶然的观察者所特有的
因此,如果您希望将数组安全地强制转换为对象,则可以使用这种方法
function recursiveArrayToObject(Array $arr, stdClass $obj = null) {
if (!$obj) {
$obj = new stdClass;
}
foreach($arr as $key => $value) {
if (is_array($value)) {
$obj->$key = recursiveArrayToObject($value);
} else {
$obj->$key = $value;
}
}
return $obj;
}
$x = ["items"=>[1=>100,2=>200]];
$xObj = recursiveArrayToObject($x);
var_dump($xObj);
这给你
object(stdClass)#1 (1) {
["items"]=>
object(stdClass)#2 (2) {
["1"]=>
int(100)
["2"]=>
int(200)
}
}
输出
object(stdClass)#1 (1) {
["items"]=>
array(2) {
[1]=>
int(100)
[2]=>
int(200)
}
}
int(200)
对象(标准类)#1(1){
[“项目”]=>
阵列(2){
[1]=>
整数(100)
[2]=>
国际(200)
}
}
国际(200)
echo$x[0]->项目[2]代码>@abracadver谢谢!!当然可以items
是结果对象的唯一属性,因此这不是问题。@abracadver可能是这样,但我的假设是它们要将整个数组强制转换为对象。我可能想错了。在任何情况下,盲目地将数组转换为对象都是不安全的,因为这个整数键问题会导致无法访问的对象属性。这仍然是一件值得注意的事情,即使它不适用于这一个非常特殊的案例和这一组非常特殊的数据。不是我。这是一个相当不错的答案,只是它不适用于$x=[(object)[“items”=>[1=>100,2=>200]]代码>我也没有对你投反对票,但我不认为手册中的那句话是一个明确的警告。它只是告诉你它是如何工作的;它并没有说你不应该这么做。
function arrayToObject(Array $arr, stdClass $obj = null) {
if (!$obj) {
$obj = new stdClass;
}
foreach($arr as $key => $value) {
$obj->$key = $value;
}
return $obj;
}
$x = ["items"=>[1=>100,2=>200]];
$xObj = arrayToObject($x);
var_dump($xObj, $xObj->items[2]);
object(stdClass)#1 (1) {
["items"]=>
array(2) {
[1]=>
int(100)
[2]=>
int(200)
}
}
int(200)