簡體   English   中英

如何使用函數更改多維數組元素

[英]How to change a multidimension array element with a function

我有一個像這樣的數組:

<?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情況下編寫此函數?

$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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM