0

目標は、custom_format() を介して特定の配列要素を渡すことです。

例: $hierarchy = '4:0:2' の場合、$data[4][0][2] = custom_format($data[4][0][2])。

eval() に依存せずに次のコードを複製する方法を知っている人はいますか?

現在のコード:

$hierarchy = '4:0:2';
$hierarchy = str_replace(':', '][', $hierarchy);
eval("\$data[$hierarchy] = custom_format(\$data[$hierarchy]);");

前もって感謝します。

4

2 に答える 2

2

非常に冗長ですがエレガントなオプションは次のとおりです。

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 オブジェクトに配列して、この動作に一貫して応答するようにすることを意味します。

具体的な例の 1 つは、offsetGetメソッドを変更して $value が an かどうかを確認し、その要素にアクセスする場合arrayは変換関数を使用して a に変換する必要があることです。MyArray

于 2012-06-27T15:34:46.980 に答える
0

このようなものはどうですか:

<?php
$hierarchy = '4:0:2';
list($a,$b,$c) = explode(':',$hierarchy);
echo $data[$a][$b][$c];
?>
于 2012-06-27T15:00:47.110 に答える