Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有人知道如何在一行中打印这个数组中的数字200吗?_Php_Arrays - Fatal编程技术网

Php 有人知道如何在一行中打印这个数组中的数字200吗?

Php 有人知道如何在一行中打印这个数组中的数字200吗?,php,arrays,Php,Arrays,我试图从这个数组中打印数字200,但我不知道如何使用(对象)强制转换 您不应该盲目地将数组投射到对象,因为这样不安全。PHP在手册中明确警告不要这样做 数组转换为具有由键和相应值命名的属性的对象,数字键除外,除非迭代,否则无法访问数字键 这意味着数组中任何转换到对象的数字键都将变得不可访问。在这种特殊情况下,正在转换的数组中唯一的键恰好是字符串,这意味着$x->items[2]将给出预期的结果 因此,例如,$x=(object)[1=>100,2=>200]将导致$x[2]和$x[“2”]始终

我试图从这个数组中打印数字200,但我不知道如何使用(对象)强制转换

您不应该盲目地将数组投射到对象,因为这样不安全。PHP在手册中明确警告不要这样做

数组转换为具有由键和相应值命名的属性的对象,数字键除外,除非迭代,否则无法访问数字键

这意味着数组中任何转换到对象的数字键都将变得不可访问。在这种特殊情况下,正在转换的数组中唯一的键恰好是字符串,这意味着
$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)