2015-07-11 77 views
0

嵌套數組的設定值可以說我有這樣的代碼:PHP:使用可變關鍵

$array = [ 
     'a'=> [ 
      'b' => [ 
       'c'=>'some value', 
      ], 
     ], 
    ]; 

    $array['a']['b']['c'] = 'new value'; 

當然這是工作,但我想要的是更新使用可變這個「C」鍵,這樣的事情:

$keys = '[a][b][c]'; 
$array{$keys} = 'new value'; 

但鍵treatening爲字符串,這就是我得到:

$array['[a][b][c]'] = 'new value'; 

所以我想一些幫助,向我展示如何在不使用eval()的情況下完成這項工作的正確方法。

順便說一句,可以有任意數量的陣列巢的,所以這樣的事情是不是一個很好的答案:

$key1 = 'a'; 
$key2 = 'b'; 
$key3 = 'c'; 
$array[$key1][$key2][$key3] = 'new value'; 

回答

1

它不是定義鍵的最佳方式,但:

$array = []; 
$keys = '[a][b][c]'; 
$value = 'HELLO WORLD'; 

$keys = explode('][', trim($keys, '[]')); 
$reference = &$array; 
foreach ($keys as $key) { 
    if (!array_key_exists($key, $reference)) { 
     $reference[$key] = []; 
    } 
    $reference = &$reference[$key]; 
} 
$reference = $value; 
unset($reference); 

var_dump($array); 

如果你有這樣的字符串來定義鍵序列,那麼它的簡單只是使用簡單的分離器可以爆炸,而不需要修剪,以及建立單獨的按鍵陣列,這樣更簡單的東西像a.b.c會更容易比[a][b][c]

Demo

+0

多虧了工作,這就是我所需要的。是的,IAM使用join()函數將字符串定義爲a.b.c,如果有人需要,可以使用代碼: function keyArray($ array = [],array $ path = []){result = array(); ($ array as $ key => $ val){ $ currentPath = array_merge($ path,array($ key)); if(is_array($ val)){ $ result = array_merge($ result,keyArray($ val,$ currentPath)); } else { $ result [] = join('。',$ currentPath); } } return $ result; } –

0

嗨老兄,你可以做這樣的throught鍵的數組:

這是你的陣列結構:

$array = array(
    'a'=> array(
     'b' => array(
      'c'=>'some value', 
     ), 
    ), 
); 

這是PHP代碼從您的陣列,動態密鑰獲得價值:

$result = $array; //Init an result array by the content of $array 

$keys = array('a','b','c'); //Make an array of keys 

//For loop to get result by keys 
for($i=0;$i<count($keys);$i++){ 
    $result = $result[$keys[$i]]; 
} 

echo $result; // $result = 'new value' 

我希望這個答案對你有幫助,在這裏找到你的工作代碼PHPFiddle