如何使用函数更改多维数组元素

时间:2013-06-28 07:54:21

标签: php arrays function multidimensional-array

我有一个这样的数组:

<?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的情况下编写此功能?

1 个答案:

答案 0 :(得分: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);