如何将数组元素作为子数组插入,例如第一个元素是第二个元素的父元素,第二个元素是第三个元素的父元素等等?
How to insert array elements as sub array like first element is the parent of second,second is the parent of third and so on?
我需要转换一个类似于
$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
))
如有任何帮助,我们将不胜感激。谢谢:-)
您还有其他进一步的考虑吗?
下面的代码就是这样做的:
<?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]]);
}
}
您可以创建自己的方法来创建这样的结构,只需遍历数组并为每个元素创建一个内部子元素。
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
添加另一个参数函数,将此值添加为最内键。
你可以使用这个,非常基本的逻辑:
$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;
}
我需要转换一个类似于
$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
))
如有任何帮助,我们将不胜感激。谢谢:-)
您还有其他进一步的考虑吗?
下面的代码就是这样做的:
<?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]]);
}
}
您可以创建自己的方法来创建这样的结构,只需遍历数组并为每个元素创建一个内部子元素。
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
添加另一个参数函数,将此值添加为最内键。
你可以使用这个,非常基本的逻辑:
$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;
}