我有一个问题:动态创建多维数组的最简单方法是什么?
这是一个静态版本:
$tab['k1']['k2']['k3'] = 'value';
我想避免使用eval()
我对变量变量($$)没有成功
所以我正在尝试用这样的界面开发一个函数乐趣:
$tab = fun( $tab, array( 'k1', 'k2', 'k3' ), 'value' );
你有解决方案吗?什么是最简单的方法?
的问候, 安妮
答案 0 :(得分:1)
有很多方法可以实现这一点,但是这里有一个使用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
)
)
)
答案 1 :(得分:1)
以下功能适用于任意数量的按键。
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;
}
答案 2 :(得分:0)
如果$ tab总是有3个索引,这应该有效:
function func(& $ name,$ indices,$ value) { $ name [$ indices [0]] [$ indices [1]] [$ indices [2]] = $ value; };
func($ tab,array(' k1',' k2',' k3'),' value');