我有这样的数据:
它也可以被看作是这个PHP数组:
$items = [
['item1' => 'a', 'item2' => 'c', 'item3' => 'h'],
['item1' => 'a', 'item2' => 'c', 'item3' => 'i'],
['item1' => 'a', 'item2' => 'd', 'item3' => 'j'],
['item1' => 'a', 'item2' => 'd', 'item3' => 'k'],
['item1' => 'b', 'item2' => 'e', 'item3' => 'l'],
['item1' => 'b', 'item2' => 'e', 'item3' => 'm'],
['item1' => 'b', 'item2' => 'f', 'item3' => 'n'],
['item1' => 'b', 'item2' => 'g', 'item3' => 'o'],
];
甚至这个(多维)列表:
a
c
h
i
d
j
k
b
e
l
m
f
n
g
o
我如何循环遍历这些数据并创建一个像这样的多维数组
$items = [
[a, [[c, [h, i]], [d, [j, k]]],
[b, [[e, [l, m]], [f, [n]], [g, [o]]]
];
基本上我的目标是建立多维的html列表,但我的大脑卡住了。有了多维数组我就能做到。
谢谢!
这里有一个尝试来解决它。这是一个更复杂的例子。它是“太硬编码”。索引中有一些错误。
我在想有没有更干净的方法。
<?php
$items = [
['item1' => 'a', 'item2' => 'c', 'item3' => 'd2', 'item4' => 'f'],
['item1' => 'a', 'item2' => 'c', 'item3' => 'd2', 'item4' => 'g'],
['item1' => 'a', 'item2' => 'd', 'item3' => 'd3', 'item4' => 'h'],
['item1' => 'a', 'item2' => 'd', 'item3' => 'e', 'item4' => 'i'],
['item1' => 'b', 'item2' => 'c', 'item3' => 'e', 'item4' => 'j'],
['item1' => 'b', 'item2' => 'c', 'item3' => 'e', 'item4' => 'k'],
['item1' => 'b', 'item2' => 'c', 'item3' => 'e', 'item4' => 'l'],
['item1' => 'b', 'item2' => 'c2', 'item3' => 'e', 'item4' => 'm'],
];
$items_new = [];
$item1 = '';
$item2 = '';
$item3 = '';
$item4 = '';
foreach ($items as $item):
$item1_new = $item['item1'];
$item2_new = $item['item2'];
$item3_new = $item['item3'];
$item4_new = $item['item4'];
if($item1 != $item1_new)
{
$items_new[] = [$item1_new, []];
$item1 = $item1_new;
$item2 = '';
}
if($item2 != $item2_new)
{
$items_new[count($items_new) - 1][] = [$item2_new, []];
$item2 = $item2_new;
$item3 = '';
}
if($item3 != $item3_new)
{
$items_new[count($items_new) - 1][count($items_new[1]) - 1][] = [$item3_new, []];
$item3 = $item3_new;
$item4 = '';
}
if($item4 != $item4_new)
{
$items_new[count($items_new) - 1][count($items_new[1]) - 1][count($items_new[2]) - 1][] = [$item4_new, []];
$item4 = $item4_new;
}
endforeach;
foreach($items_new as $items1)
{
if (is_string($items1))
{
echo $items1 . '<br>';
}
elseif (is_array($items1))
{
foreach($items1 as $items2)
{
if (is_string($items2))
{
echo ' - ' . $items2 . '<br>';
}
elseif (is_array($items2))
{
foreach ($items2 as $items3)
{
if (is_string($items3))
{
echo ' --- ' . $items3 . '<br>';
}
elseif (is_array($items3))
{
foreach ($items3 as $items4)
{
if (is_string($items4))
{
echo ' ----- ' . $items4 . '<br>';
}
elseif (is_array($items4))
{
foreach ($items4 as $items5)
{
if (is_string($items5))
{
echo ' ------- ' . $items5 . '<br>';
}
elseif (is_array($items5))
{
foreach ($items5 as $items6)
{
}
}
}
}
}
}
}
}
}
}
}
?>
2条答案
按热度按时间kq0g1dla1#
在推送和管理数据分组时,使用引用可避免跟踪显式索引。
一个引用将确定是否需要示例化新的顶级行并将其推入结果数组。另一个引用将确定是否需要示例化唯一的第二级行并将其推送到其父行中。
代码:(Demo)
输出(带有一些换行符和制表符以提高可读性):
通过将该过程 Package 在另一组类似的条件中,可以扩展上述代码段,使每行包含4个元素。请注意(与第一个代码片段一样),只有最低级别的元素没有被声明为引用。Demo
输出:
beq87vna2#
解决了!