代码之家  ›  专栏  ›  技术社区  ›  Jianov

从现有阵列构造细枝阵列

  •  0
  • Jianov  · 技术社区  · 7 年前

    我需要一些关于这个数组的帮助,我不知道如何根据一些数组值创建多维数组。

    我有一个普通数组,假设有以下转储输出:

    array(
      [0] => ("id" => "421", "name" => "element 1", "TYPE" => "1")
      [1] => ("id" => "422", "name" => "element 2", "TYPE" => "2")
      [2] => ("id" => "423", "name" => "element 3", "TYPE" => "2")
      [3] => ("id" => "424", "name" => "element 4","TYPE" => "1")
    )
    

    我需要根据“TYPE”键创建一个多维数组。如果TYPE=1,则此数组应包含“TYPE”==2的所有数组,直到找到类型==1的下一个数组为止,输出应如下所示:

    array(
      [421] => array(
        "column" => array("id" => "421", "name" => "element 1", "TYPE" => "1"),
        "subcolumns" => array(
            [0] => ("id" => "422", "name" => "element 2", "TYPE" => "2"),
            [1] => ("id" => "423", "name" => "element 3","TYPE" => "2")
         )
      )
      [424] => array(
        "column" => array("id" => "424", "name" => "element 4","TYPE" => "1"),
        "subcolumns" => array()
      )
    )
    

    如果我能用twig完成这个任务,有什么想法吗(对我来说会更好),如果没有,我也可以用PHP。 我已经尝试过在不更改数组的情况下构建HTML结构,但没有成功。

    我需要创建列,“父项”应该是类型为1的项,所有类型为2的项都应该是类型为1的子项,以便使用jquery ui对它们进行左右排序。

    非常感谢。

    1 回复  |  直到 7 年前
        1
  •  2
  •   u_mulder    7 年前

    一些代码开始:

    $new_array = [];
    $cur_id = 0;
    foreach ($array as $item) {
        if ($item['TYPE'] == 1) {
            $new_array[$item['id']] = [
                'column' => $item,
                'subcolumns' => [],
            ];
            $cur_id = $item['id'];
        } else {
            $new_array[$cur_id]['subcolumns'][] = $item;
        }
    }