Мне нужно преобразовать массив, который похож
$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);
Или вы можете использовать для цикла, как это:
<?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]]);
}
}
Вы можете использовать это с очень простой логикой:
$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;
}
Вы можете создать свой собственный метод для создания такой структуры, просто пройдя массив и создав внутреннего потомка для каждого элемента.
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
функция, которая добавляет это значение как самый внутренний ключ.