Как вставить элементы массива в виде подмассива, как первый элемент является родителем второго, второй является родителем третьего и так далее?

Мне нужно преобразовать массив, который похож
$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
))

Любая помощь будет оценена. Спасибо 🙂

1

Решение

У вас есть другие соображения?

Следующий код просто для этого:

<?php
$data = array('Image','Thumbnail','size');
$newArray[$data[0]][$data[1]][$data[2]]='test';
var_dump($newArray);

Или вы можете использовать для цикла, как это:

<?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]]);
}
}
0

Другие решения

Вы можете использовать это с очень простой логикой:

$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;
}
1

Вы можете создать свой собственный метод для создания такой структуры, просто пройдя массив и создав внутреннего потомка для каждого элемента.

function createPath($array) {
$result = [];
$current = &$result;
foreach ($array as $node) {
$current[$node] = [];
$current = &$current[$node];
}
return $result;
}

Это также может быть сделано с array_reduce и обратный массив 🙁массив_редукция, документация array_reverse)

$result = array_reduce(array_reverse($array), function($carry, $element) {
return [$element => $carry];
}, []);

В то время как foreach Решение построит структуру от внешнего элемента до самого внутреннего элемента, array_reduce Решение построит его от внутренних до внешних элементов.

Оба решения создадут вывод:

[
'Image' => [
'Thumbnail' => [
'size' => []
]
]
]

Если вы хотите, чтобы самый внутренний ключ содержал другое значение, чем пустой массив, вы можете изменить начальное значение array_reduce довести до этого желаемого значения или добавить другой параметр в createPath функция, которая добавляет это значение как самый внутренний ключ.

1
По вопросам рекламы [email protected]