尝试用:
$target = array();
$value = array();
$path = array('apple', 'orange', 'tomato');
$rv = &$target;
foreach($path as $pk)
{
$rv = &$rv[$pk];
}
$rv = $value;
unset($rv);
print_r($target);
输出:
Array
(
[apple] => Array
(
[orange] => Array
(
[tomato] => Array
(
)
)
)
)
更新1:释
这里我使用引用/变量别名来遍历键的动态堆栈。该引用使得可以使用堆栈而不是通常更精简的递归。此外,此代码可以防止覆盖$target
阵列中的现有元素。 有关引用的详细看看Reference Explained
$target = array(); //target array where we will store required out put
$value = array(); //last value i.e. blank array
$path = array('apple', 'orange', 'tomato'); //current array
$rv = &$target; //assign address of $target to $rv (reference variable)
foreach($path as $pk)
{
$rv = &$rv[$pk]; // Unused reference [ex. $rv['apple'] then $rv['apple']['orange'] .. so on ] - actually assigned to $target by reference
print_r($target);
echo '-----------------<br />';
}
$rv = $value; //here $rv have unused refernce of value tomato so finally assigned a blank array to key tomoto
//
unset($rv); // Array copy is now unaffected by above reference
echo "final array<br />";
print_r($target);
输出:
Array
(
[apple] =>
)
-----------------
Array
(
[apple] => Array
(
[orange] =>
)
)
-----------------
Array
(
[apple] => Array
(
[orange] => Array
(
[tomato] =>
)
)
)
-----------------
final array
Array
(
[apple] => Array
(
[orange] => Array
(
[tomato] => Array
(
)
)
)
)
在交代的输出,你可以跟踪的$target
值在foreach
环
有趣的问题... – Ahsan
谢谢大家。所有答案都是优越的。 – Nail
什么样的作业可以帮助完成? ;-)。仍然有趣的问题,有趣的答案 – cypherabe