我需要将类似$data = array('Image','Thumbnail','size')的数组转换为$data= array('Image'=>array('Thumbnail'=>array('size'=>'test')));格式。这怎么可能呢?我曾经尝试过下面这样的东西。
$count= count($data);
$last = $count-1;
for($i=$count-2;$i>=0;$i--)
{
$newArray[$data[$i]][$data[$last]]='test';
$last=$i;
}但是它给出的输出是
Array(
[thumbnail] => Array
(
[type] => test
)
[image] => Array
(
[thumbnail] => test
))任何帮助都将不胜感激。谢谢:-)
发布于 2018-01-02 19:53:32
您还有其他的考虑因素吗?
下面的代码就是为了做到这一点:
<?php
$data = array('Image','Thumbnail','size');
$newArray[$data[0]][$data[1]][$data[2]]='test';
var_dump($newArray);或者您可以像这样使用for循环:
<?php
$data = array('Image','Thumbnail','size');
$result=array();
for($i=(count($data)-1);$i>=0;$i--){
if($i==(count($data)-1))
$result[$data[$i]]='test';
else{
$result[$data[$i]]=$result;
unset($result[$data[$i+1]]);
}
}发布于 2018-01-02 20:00:56
您可以创建自己的方法来创建这样的结构,只需遍历数组并为每个元素创建一个内部子级。
function createPath($array) {
$result = [];
$current = &$result;
foreach ($array as $node) {
$current[$node] = [];
$current = &$current[$node];
}
return $result;
}这也可以使用array_reduce和反转数组来完成:(array_reduce doumentation,array_reverse documentation)
$result = array_reduce(array_reverse($array), function($carry, $element) {
return [$element => $carry];
}, []);foreach解决方案将构建从外部元素到最内部元素的结构,而array_reduce解决方案将构建从内部元素到外部元素的结构。
两个解决方案都将创建输出:
[
'Image' => [
'Thumbnail' => [
'size' => []
]
]
]如果您希望最内键包含空数组以外的其他值,则可以将array_reduce进位的初始值更改为所需的值,或者向createPath函数添加另一个参数,从而将该值添加为最内键。
发布于 2018-01-02 20:22:15
你可以使用这个,用非常基本的逻辑:
$array = array('Image','Thumbnail','size', 'test');
$a = [];
$i = count($array)- 1;
$a[$array[$i-1]] = $array[$i];
--$i;
while($i >= 1 ) {
$a[$array[$i-1]] = $a;
unset($a[$array[$i]]);
--$i;
}https://stackoverflow.com/questions/48060194
复制相似问题