У нас есть массив со следующими значениями:Transform ассоциативный массив рекурсивный
$a = array("a", "a.b", "a.b.c", "X", "X.Y", "X.Y.Z");
И цель, чтобы изменить первый массив в следующем составе:
$a = array(
"a" => array(
"b" => array(
"c" => array(),
),
),
"X" => array(
"Y" => array(
"Z" => array(),
),
),
);
Почему я спрашиваю? У моего клиента есть таблица для категорий магазинов. И эти категории находятся в одной колонке (упрощенной!):
+-----------------------+
|id | name |
+---|-------------------+
| 4 | A |
| 5 | A.B |
| 6 | A.B.C |
| 7 | X |
| 8 | X.Y |
| 9 | X.Y.Z |
+-----------------------+
Как я могу это сделать с помощью PHP?
EDIT:
Мои текущие решения "/ Trys"
<?php
$arr = array(
"a",
"a.b",
"a.b.c",
"x",
"x.y",
"x.y.z",
);
$container = array();
$updateMe = array();
foreach($arr as $key => $value) {
$cleanName = explode(".", $value);
foreach($cleanName as $keyArray => $valueArray) {
for($c = 0;$c<$keyArray+1;$c++) {
$updateMe[$cleanName[$c]] = array();
}
}
$container[$cleanName[0]] = $updateMe;
unset($updateMe);
}
echo "<pre>";
var_dump($container);
echo "===\r\n";
Мой выход:
array(2) {
["a"]=>
array(3) {
["a"]=>
array(0) {
}
["b"]=>
array(0) {
}
["c"]=>
array(0) {
}
}
["x"]=>
array(3) {
["x"]=>
array(0) {
}
["y"]=>
array(0) {
}
["z"]=>
array(0) {
}
}
}
===
РЕШЕНИЕ
<?php
$arr = array(
"a",
"a.b",
"a.b.c",
"x",
"x.y",
"x.y.z",
);
$array = array();
$test = array();
foreach($arr as $key => $text) {
$array = array();
foreach(array_reverse(explode('.', $text)) as $key) $array = array($key => $array);
$test[] = $array;
}
echo "<pre>";
var_dump($test);
echo "===\r\n";
И каков ваш вопрос? –
Ваш прием не имеет смысла! – Rizier123
Не ясно, почему вы исходный массив состоит из 6 элементов, но ваш результат массив имеет только 2. –