我想拿一个数组,说:
array("one", "two", "three");
并将其制成数组数组,例如:
$someArray["one"]["two"]["three"];
数组 ( $someArray
) 的数组必须由某种循环创建,因为初始数组是由 an 创建的,explode()
所以我不知道有多深$someArray
。
我希望这很清楚,谢谢大家的时间!
我自己现在正在阅读它,会array_map()
为此工作吗?
你可以这样做:
$path = array("one", "two", "three");
$ref = &$arr;
foreach ($path as $key) {
if (!isset($ref[$key])) break;
$ref = &$ref[$key];
}
最后是对它是否存在$ref
的引用。$arr['one']['two']['three']
如果你替换break
为$ref[$key] = array()
你将构建一个具有该结构的数组。
你应该使用array_reduce。解决方案非常简单。
要做到这一点,请反转数组,然后才应用归约。
$a = array('a','b','c');
$x = array_reduce(array_reverse($a), function ($r, $c) {
return array($c=>$r);
},array());
编辑扩展和解释版本:
在 php 中,我们没有自动深入数组的函数,但我们没有。如果您从底部开始,我们将能够通过简单的分配将一个数组包含在前一个数组中。
$a = array('a','b','c');
$result=array(); // initially the accumulator is empty
$result = array_reduce(
array_reverse($a),
function ($partialResult, $currentElement) {
/* enclose the partially computed result into a key of a new array */
$partialResult = array($currentElement=>$partialResult);
return $partialResult;
},
$result
);
顺便说一句,我更喜欢较短的形式。我认为这是一个函数式惯用语,不需要向中级经验丰富的开发人员(具有一点函数背景)进一步解释。第二个增加了很多噪音,它适合学习,但会分散生产代码的注意力(显然我指的是只有一个返回语句的函数)。
我不知道你为什么想要这个。
但是,但你想要的基础是这样的
$numbers = array("one", "two", "three");
$array = array();
$pointer = &$array;
$last_val = NULL;
foreach($numbers as $key => $val){
if(!empty($pointer[$last_val])){
$pointer = &$pointer[$last_val];
$pointer = new array($val);
$last_val = $val;
}else{
$pointer = new array($val);
$last_val = $val;
}
}
这应该是正确的 $array;
这是未经测试的,但我认为如果它不只是告诉我它在做什么,我认为应该可以工作,我会看看
$arrNew = array();
$ref = &$arrNew;
$arrParts = array("one", "two", "three");
foreach($arrParts as $arrPart){
$ref[$arrPart] = array();
$ref = &$ref[$arrPart];
}
当你打印 $arrNew 时,它会打印这个..
Array
(
[one] => Array
(
[two] => Array
(
[three] => Array
(
)
)
)
)