我有問題:什麼是最簡單的方法來創建動態PHP中的多維數組?php多數組動態創建
這裏靜態版本:
$tab['k1']['k2']['k3'] = 'value';
我想避免的eval()
我不是成功的,可變的變量($$)
所以我試圖建立一個函數fun帶有這樣的接口:
$tab = fun($tab, array('k1', 'k2', 'k3'), 'value');
你有解決方案嗎?最簡單的方法是什麼?
問候, 安妮
我有問題:什麼是最簡單的方法來創建動態PHP中的多維數組?php多數組動態創建
這裏靜態版本:
$tab['k1']['k2']['k3'] = 'value';
我想避免的eval()
我不是成功的,可變的變量($$)
所以我試圖建立一個函數fun帶有這樣的接口:
$tab = fun($tab, array('k1', 'k2', 'k3'), 'value');
你有解決方案嗎?最簡單的方法是什麼?
問候, 安妮
有很多方法可以實現這一點,但是這裏有一個使用PHP的功能將N個參數傳遞給函數的方法。這使您可以靈活地創建深度爲3,或2,或7或其他的數組。
// pass $value as first param -- params 2 - N define the multi array
function MakeMultiArray()
{
$args = func_get_args();
$output = array();
if (count($args) == 1)
$output[] = $args[0]; // just the value
else if (count($args) > 1)
{
$output = $args[0];
// loop the args from the end to the front to make the array
for ($i = count($args)-1; $i >= 1; $i--)
{
$output = array($args[$i] => $output);
}
}
return $output;
}
下面是它如何工作:
$array = MakeMultiArray('value', 'k1', 'k2', 'k3');
而且會產生這樣的:
Array
(
[k1] => Array
(
[k2] => Array
(
[k3] => value
)
)
)
這應該工作,如果$標籤始終有3個指標:
函數func(& $名稱,$指數,$值) { $名稱[$指數[0]] [$ indices [1]] [$ indices [2]] = $ value; }; func($ tab,array('k1','k2','k3'),'value');
下列功能就會對任何數字鍵的工作。
function fun($keys, $value) {
// If not keys array found then return false
if (empty($keys)) return false;
// If only one key then
if (count($keys) == 1) {
$result[$keys[0]] = $value;
return $result;
}
// prepare initial array with first key
$result[array_shift($keys)] = '';
// now $keys = ['key2', 'key3']
// get last key of array
$last_key = end($keys);
foreach($keys as $key) {
$val = $key == $last_key ? $value : '';
array_walk_recursive($result, function(&$item, $k) use ($key, $val) {
$item[$key] = $val;
});
}
return $result;
}
非常感謝所有解決方案。其他簡單的代碼在這裏(函數setValueFromPath):http://stackoverflow.com/questions/7850744/how-to-reffer-dynamically-to-a-php-array-variables – 2014-11-24 18:31:58