0

我有一个这样的数组:

<?php
$arr = [
    'a' => [
        'a1' => [
            'A11', 'A12', 'A13'
        ]
    ]
];

A13我可以以一种简单的方式更改元素:

$arr['a']['a1'][2] = 'A13 NEW';

但我想用一个函数来做到这一点,像这样:

f($arr, ['a', 'a1', 2], 'A13 New');

我使用它编写此函数eval,但我不喜欢它。

<?php
function f(&$array, $index, $value) {
    $e = '$array';
    for ($i = 0, $l = count($index); $i < $l; $i++) {
        $e .= '[$index[' . $i . ']]';
    }
    $e .= ' = $value;';

    // now we have `$e` like this
    // $array[$index[0]][$index[1]][$index[2]] = $value;

    eval($e);
}

如何在不使用的情况下编写此函数eval

4

1 回答 1

3
$arr = array(
    'a' => array(
        'a1' => array(
            'A11', 'A12', 'A13'
        )
    )
);

function f(&$arr, $index, $value) {
    $tmp = &$arr;
    foreach ($index as $key) {
        $tmp = &$tmp[$key];
    }
    $tmp = $value;
}

f($arr, array('a', 'a1', 2), 'A13 New');

//$arr['a']['a1'][2] = 'A13 NEW';
var_dump($arr);
于 2013-06-28T08:08:31.350 回答