我想價值觀,如列表轉換:如何將值列表設置爲多維關聯數組中的鍵?
$foo = ['a', 'b', 'c'];
到遍歷數組鍵如列表:
$bar['a']['b']['c'] = 123;
如何創建哪些鍵是基於一個關聯數組一組值存儲在另一個數組中?
我想價值觀,如列表轉換:如何將值列表設置爲多維關聯數組中的鍵?
$foo = ['a', 'b', 'c'];
到遍歷數組鍵如列表:
$bar['a']['b']['c'] = 123;
如何創建哪些鍵是基於一個關聯數組一組值存儲在另一個數組中?
您可以參考。試試這個代碼,live demo
<?php
$foo = ['a', 'b', 'c'];
$array = [];
$current = &$array;
foreach($foo as $key) {
@$current = &$current[$key];
}
$current = 123;
print_r($array);
我會做這樣的:
$foo = ['a', 'b', 'c'];
$val = '123';
foreach (array_reverse($foo) as $k => $v) {
$bar = [$v => $k ? $bar : $val];
}
我們迭代反向陣列上和第一分配最裏面的值,然後建立由內而外的陣列。
這是另一種選擇:創建一個臨時可解析字符串(通過提取第一個值,然後將剩餘值附加爲方括號包裝字符串),調用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
你嘗試過什麼嗎?發佈你的努力。 –
你可以使用for循環來實現。 – Geshode
123從哪裏來?如果輸入是'['a','b','c','d'];'會輸出'$ bar ['a'] ['b'] ['c'] ['d 「]'?而且它仍然是123?還是1234? – Andreas