php – 通过ArrayAccess访问多维数组
发布时间:2020-12-13 15:57:56 所属栏目:PHP教程 来源:网络整理
导读:说我有以下代码: ?phpclass test implements ArrayAccess { var $var; function __construct() { $this-var = array( 'a' = array('b' = 'c'),'d' = array('e' = 'f'),'g' = array('h' = 'i') ); } function offsetExists($offset) { return isset($this-va
说我有以下代码:
<?php class test implements ArrayAccess { var $var; function __construct() { $this->var = array( 'a' => array('b' => 'c'),'d' => array('e' => 'f'),'g' => array('h' => 'i') ); } function offsetExists($offset) { return isset($this->var); } function offsetGet($offset) { return isset($this->var[$offset]) ? $this->var[$offset] : null; } function offsetSet($offset,$value) { if (is_null($offset)) { $this->var[] = $value; } else { $this->var[$offset] = $value; } } function offsetUnset($offset) { unset($this->var[$offset]); } } $test = new test(); $test['a']['b'] = 'zzz'; print_r($test->var); 我想要做的是显示如下内容: Array ( [a] => Array ( [b] => zzz ) [d] => Array ( [e] => f ) [g] => Array ( [h] => i ) ) 实际显示的内容更像是: Array ( [a] => Array ( [b] => c ) [d] => Array ( [e] => f ) [g] => Array ( [h] => i ) ) 即. $test [‘a’] [‘b’]不变. 知道如何使用该语法使其可更改吗?我可以将$test [‘a’]分配给变量然后执行$temp [‘b’] =’zzz’;然后做$test [‘a’] = $temp;但是idk – 这似乎过分了. 解决方法
问题是offsetGet按值返回一个数组,即内部值的副本. $test [‘a’] [‘b’] =’zzz’在此副本上运行,由$test [‘a’]返回.
但是你可以让offsetGet返回一个引用: function &offsetGet($offset) { $null = null; if (isset($this->var[$offset])) { return $this->var[$offset]; } return $null; } 请注意,我还必须修改方法体,因此返回后总是后跟变量,而不是表达式. 演示: https://3v4l.org/4jGMN
更新 您甚至可以将其简化为: function &offsetGet($offset) { return $this->v[$offset]; } 因为如果通过引用返回不存在的变量,则会隐式创建它们.这样,您可以创建新的嵌套元素,如下所示: $test['new']['nested'] = 'xxx'; 演示:https://3v4l.org/OSvuA (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |