2013-06-28 19 views
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的情況下編寫此函數?

回答

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