2017-12-18 212 views
3

我想價值觀,如列表轉換:如何將值列表設置爲多維關聯數組中的鍵?

$foo = ['a', 'b', 'c']; 

到遍歷數組鍵如列表:

$bar['a']['b']['c'] = 123; 

如何創建哪些鍵是基於一個關聯數組一組值存儲在另一個數組中?

+0

你嘗試過什麼嗎?發佈你的努力。 –

+0

你可以使用for循環來實現。 – Geshode

+1

123從哪裏來?如果輸入是'['a','b','c','d'];'會輸出'$ bar ['a'] ['b'] ['c'] ['d 「]'?而且它仍然是123?還是1234? – Andreas

回答

4

您可以參考。試試這個代碼,live demo

<?php 
$foo = ['a', 'b', 'c']; 
$array = []; 
$current = &$array; 
foreach($foo as $key) { 
    @$current = &$current[$key]; 
} 
$current = 123; 
print_r($array); 
1

我會做這樣的:

$foo = ['a', 'b', 'c']; 
$val = '123'; 
foreach (array_reverse($foo) as $k => $v) { 
    $bar = [$v => $k ? $bar : $val]; 
} 

我們迭代反向陣列上和第一分配最裏面的值,然後建立由內而外的陣列。

0

這是另一種選擇:創建一個臨時可解析字符串(通過提取第一個值,然後將剩餘值附加爲方括號包裝字符串),調用parse_str(),並將輸出變量設置爲$bar

代碼:(Demo

$foo = ['a', 'b', 'c']; 
$val=123; 

parse_str(array_shift($foo).'['.implode('][',$foo)."]=$val",$bar); 
// built string: `a[b][c]=123` 
var_export($bar); 

輸出:

array (
    'a' => 
    array (
    'b' => 
    array (
     'c' => '123', 
    ), 
), 
) 

如果第一方法感覺太劈肥胖型,下面的遞歸方法是一種穩定的方法:

驗證碼:(Demo

function nest_assoc($keys,$value){ 
    return [array_shift($keys) => (empty($keys) ? $value : nest_assoc($keys,$value))]; 
    //  ^^^^^^^^^^^^^^^^^^--------------------------------------------------------extract leading key value, modify $keys 
    // check if any keys left-----^^^^^^^^^^^^ 
    // no more keys, use the value---------------^^^^^^ 
    // recurse to write the subarray contents-------------^^^^^^^^^^^^^^^^^^^^^^^^^ 
} 

$foo=['a','b','c']; 
$val=123; 

var_export(nest_assoc($foo,$val)); 
// same output 
相關問題