You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将3列二维PHP数组转换为无关联键的层级结构

问题:将扁平化数组转换为层级化多维数组并生成HTML列表

我有一组结构化数据,可表示为如下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)
                      {
                        
                      }
                    }
                  }
                }
              }
            }
          }
        }
    }
  }
}
?>

内容的提问来源于stack exchange,提问作者nunomira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:09:52