我想拿一个数组,说:
array("one", "two", "three");
并将其转换为数组数组,例如:
$someArray["one"]["two"]["three"];
数组数组($someArray
)必须由某种循环创建,因为初始数组是由explode()
创建的,所以我不知道有多深$someArray
会的。
我希望这很清楚,谢谢你的所有时间!
我现在正在阅读它,array_map()
会为此工作吗?
答案 0 :(得分:4)
你可以这样做:
$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()
,则会构建一个具有该结构的数组。
答案 1 :(得分:1)
您应该使用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
);
顺便说一下,我更喜欢较短的形式。我认为这是一个功能性的习惯用语,不需要对中等经验的开发人员进行进一步的解释(具有一些功能背景)。第二个添加了很多噪音,它适合学习但是来源 分散到生产代码中(显然我指的是只有返回语句的函数)。
答案 2 :(得分:0)
我不确定你为什么会这样想。
但是你想要的基础就是这个
$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;
这是未经测试的,但我认为如果不只是告诉我它在做什么,我会看看它应该有效
答案 3 :(得分:0)
$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
(
)
)
)
)