eval 数组 php,PHP - 在没有eval()的情况下定位多维数组元素

一个过于冗长而优雅的选项如下:

class MyArray implements ArrayAccess {

public function offsetExists($offset) {

if(!is_array($offset))

$offset = explode(':', $value);

$key = array_shift($offset);

if($key !== NULL) {

if($this->$key InstanceOf MyArray) {

return(isset($this->$key[$offset]));

}

}

}

public function offsetGet($offset) {

if(!is_array($offset))

$offset = explode(':', $value);

$key = array_shift($offset);

if($key !== NULL) {

if($this->$key InstanceOf MyArray) {

return($this->$key[$offset]);

}

}

}

public function offsetSet($offset, $value) {

if(!is_array($offset))

$offset = explode(':', $value);

$key = array_shift($offset);

if($key !== NULL) {

if(!($this->$key InstanceOf MyArray)) {

$this->$key = new MyArray;

}

$this->$key[$offset] = $value;

}

}

public function offsetUnset($offset) {

if(!is_array($offset))

$offset = explode(':', $value);

$key = array_shift($offset);

if($key !== NULL) {

if($this->$key InstanceOf MyArray) {

return(unset($this->$key[$offset]));

}

if(count($offset) == 0) {

return(unset($this->$key));

}

}

}

}这确实意味着在需要这种数组行为的任何地方使用MyArray,并且可能创建一个静态方法,以递归方式转换数组,并将子数组子化为MyArray对象,以便它们能够始终如一地响应此行为。

一个具体示例是需要更改offsetGet方法,以检查$ value是否为array,然后如果要访问其元素,则使用转换函数将其转换为MyArray。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值