Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过jquery可折叠动态BOM?_Php_Jquery_Css_Sql Server - Fatal编程技术网

Php 通过jquery可折叠动态BOM?

Php 通过jquery可折叠动态BOM?,php,jquery,css,sql-server,Php,Jquery,Css,Sql Server,我有一个php页面,它从sql2000存储过程中提取数据,表示产品的BOM(物料清单)。现在它显示为一个平板,效果非常好。然而,经过3天的谷歌搜索/黑客攻击,我一辈子都搞不清楚如何将这些数据转换成缩进的可折叠/可扩展表或UL 附表如下: ID[假设您有如下数据: // plus any additional data per entry $data = array ( array ( 'id' => '10', 'bom_level' => '2', '

我有一个php页面,它从sql2000存储过程中提取数据,表示产品的BOM(物料清单)。现在它显示为一个平板,效果非常好。然而,经过3天的谷歌搜索/黑客攻击,我一辈子都搞不清楚如何将这些数据转换成缩进的可折叠/可扩展表或UL

附表如下:


  • ID[假设您有如下数据:

    // plus any additional data per entry
    $data = array (
      array (
        'id' => '10',
        'bom_level' => '2',
        'parent_item_no' => '2800CF',
        'comp_item_no' => '2800CF-02',
      ),
      array (
        'id' => '66',
        'bom_level' => '3',
        'parent_item_no' => '2800CF-02',
        'comp_item_no' => '2000CF-12',
      ),
      array (
        'id' => '189',
        'bom_level' => '4',
        'parent_item_no' => '2000CF-12',
        'comp_item_no' => '0578',
      ),
      array (
        'id' => '190',
        'bom_level' => '4',
        'parent_item_no' => '2000CF-12',
        'comp_item_no' => '2000CF-SH11',
      ),
      array (
        'id' => '222',
        'bom_level' => '5',
        'parent_item_no' => '2000CF-SH11',
        'comp_item_no' => '1000',
      ),
      array (
        'id' => '191',
        'bom_level' => '4',
        'parent_item_no' => '2000CF-12',
        'comp_item_no' => '2000CF-SH12',
      ),
      array (
        'id' => '223',
        'bom_level' => '5',
        'parent_item_no' => '2000CF-SH12',
        'comp_item_no' => '1000',
      ),
      array (
        'id' => '67',
        'bom_level' => '3',
        'parent_item_no' => '2800CF-02',
        'comp_item_no' => '2000CF-AG01',
      ),
      array (
        'id' => '192',
        'bom_level' => '4',
        'parent_item_no' => '2000CF-AG01',
        'comp_item_no' => '303025-20',
      ),
      array (
        'id' => '68',
        'bom_level' => '3',
        'parent_item_no' => '2800CF-02',
        'comp_item_no' => '2000CF-PL13',
      ),
      array (
        'id' => '193',
        'bom_level' => '4',
        'parent_item_no' => '2000CF-PL13',
        'comp_item_no' => '0500',
      ),
      array (
        'id' => '69',
        'bom_level' => '3',
        'parent_item_no' => '2800CF-02',
        'comp_item_no' => '2000CF-PL14',
      ),
      array (
        'id' => '194',
        'bom_level' => '4',
        'parent_item_no' => '2000CF-PL14',
        'comp_item_no' => '0187',
      ),
      array (
        'id' => '70',
        'bom_level' => '3',
        'parent_item_no' => '2800CF-02',
        'comp_item_no' => '2000CF-SQ01',
      ),
      array (
        'id' => '195',
        'bom_level' => '4',
        'parent_item_no' => '2000CF-SQ01',
        'comp_item_no' => '050018-20',
      ),
      array (
        'id' => '71',
        'bom_level' => '3',
        'parent_item_no' => '2800CF-02',
        'comp_item_no' => '2000CF-WB06',
      ),
      array (
        'id' => '196',
        'bom_level' => '4',
        'parent_item_no' => '2000CF-WB06',
        'comp_item_no' => '040013-20',
      ),
    );
    
    function helper($children, $map) {
      if (sizeof($children) > 0) {
        echo '<ul>';
        foreach ($children as $parentId => $child) {
          echo '<li>';
          echo $child['comp_item_no'];
          if ($child['comp_item_no'] !== $child['parent_item_no'] && isset($map[$child['comp_item_no']])) {
            helper($map[$child['comp_item_no']], $map);
          }
          echo '</li>';
        }
        echo '</ul>';
      }
    }
    
    /**
     * note that '2800CF' here is manually choosen
     * because it has the lowest bom_level! In your real
     * code you might want to capture those nodes while
     * restructuring the array (see above)
     */
    helper($map['2800CF'], $map); 
    
    其中,
    comp\u item\u no
    是唯一的,
    parent\u item\u no
    指向它的父节点。其中,
    parent\u item\u no=0
    是根节点

    您可以使用以下工具将其映射到另一个结构:

    $map = array();
    foreach ($data as $entry) {
      if (!isset($map[$entry['parent_item_no']])) {
        $map[$entry['parent_item_no']] = array();
      }
    
      $map[$entry['parent_item_no']][] = $entry;
    }
    
    然后可以递归地遍历,如下所示:

    // plus any additional data per entry
    $data = array (
      array (
        'id' => '10',
        'bom_level' => '2',
        'parent_item_no' => '2800CF',
        'comp_item_no' => '2800CF-02',
      ),
      array (
        'id' => '66',
        'bom_level' => '3',
        'parent_item_no' => '2800CF-02',
        'comp_item_no' => '2000CF-12',
      ),
      array (
        'id' => '189',
        'bom_level' => '4',
        'parent_item_no' => '2000CF-12',
        'comp_item_no' => '0578',
      ),
      array (
        'id' => '190',
        'bom_level' => '4',
        'parent_item_no' => '2000CF-12',
        'comp_item_no' => '2000CF-SH11',
      ),
      array (
        'id' => '222',
        'bom_level' => '5',
        'parent_item_no' => '2000CF-SH11',
        'comp_item_no' => '1000',
      ),
      array (
        'id' => '191',
        'bom_level' => '4',
        'parent_item_no' => '2000CF-12',
        'comp_item_no' => '2000CF-SH12',
      ),
      array (
        'id' => '223',
        'bom_level' => '5',
        'parent_item_no' => '2000CF-SH12',
        'comp_item_no' => '1000',
      ),
      array (
        'id' => '67',
        'bom_level' => '3',
        'parent_item_no' => '2800CF-02',
        'comp_item_no' => '2000CF-AG01',
      ),
      array (
        'id' => '192',
        'bom_level' => '4',
        'parent_item_no' => '2000CF-AG01',
        'comp_item_no' => '303025-20',
      ),
      array (
        'id' => '68',
        'bom_level' => '3',
        'parent_item_no' => '2800CF-02',
        'comp_item_no' => '2000CF-PL13',
      ),
      array (
        'id' => '193',
        'bom_level' => '4',
        'parent_item_no' => '2000CF-PL13',
        'comp_item_no' => '0500',
      ),
      array (
        'id' => '69',
        'bom_level' => '3',
        'parent_item_no' => '2800CF-02',
        'comp_item_no' => '2000CF-PL14',
      ),
      array (
        'id' => '194',
        'bom_level' => '4',
        'parent_item_no' => '2000CF-PL14',
        'comp_item_no' => '0187',
      ),
      array (
        'id' => '70',
        'bom_level' => '3',
        'parent_item_no' => '2800CF-02',
        'comp_item_no' => '2000CF-SQ01',
      ),
      array (
        'id' => '195',
        'bom_level' => '4',
        'parent_item_no' => '2000CF-SQ01',
        'comp_item_no' => '050018-20',
      ),
      array (
        'id' => '71',
        'bom_level' => '3',
        'parent_item_no' => '2800CF-02',
        'comp_item_no' => '2000CF-WB06',
      ),
      array (
        'id' => '196',
        'bom_level' => '4',
        'parent_item_no' => '2000CF-WB06',
        'comp_item_no' => '040013-20',
      ),
    );
    
    function helper($children, $map) {
      if (sizeof($children) > 0) {
        echo '<ul>';
        foreach ($children as $parentId => $child) {
          echo '<li>';
          echo $child['comp_item_no'];
          if ($child['comp_item_no'] !== $child['parent_item_no'] && isset($map[$child['comp_item_no']])) {
            helper($map[$child['comp_item_no']], $map);
          }
          echo '</li>';
        }
        echo '</ul>';
      }
    }
    
    /**
     * note that '2800CF' here is manually choosen
     * because it has the lowest bom_level! In your real
     * code you might want to capture those nodes while
     * restructuring the array (see above)
     */
    helper($map['2800CF'], $map); 
    
    函数助手($children$map){
    如果(sizeof($children)>0){
    回声“
      ”; foreach($parentId=>$child的子对象){ 回音“
    • ”; echo$child['comp_item_no']; if($child['comp\u item\u no']!=$child['parent\u item\u no']&&isset($map[$child['comp\u item\u no'])){ 助手($map[$child['comp\u item\u no']],$map); } 回音“
    • ”; } 回声“
    ”; } } /** *请注意,此处的“2800CF”是手动选择的 *因为它有最低的bom_级别!在你的真实世界里 *您可能希望捕获这些节点的代码 *重组阵列(见上文) */ 助手($map['2800CF',$map);
    要生成嵌套的ul示例(用于上面的数据):

    <<
  • 050018-20
    • 2000CF-WB06
      • 040013-20
        演示:

        假设您有如下数据:

        // plus any additional data per entry
        $data = array (
          array (
            'id' => '10',
            'bom_level' => '2',
            'parent_item_no' => '2800CF',
            'comp_item_no' => '2800CF-02',
          ),
          array (
            'id' => '66',
            'bom_level' => '3',
            'parent_item_no' => '2800CF-02',
            'comp_item_no' => '2000CF-12',
          ),
          array (
            'id' => '189',
            'bom_level' => '4',
            'parent_item_no' => '2000CF-12',
            'comp_item_no' => '0578',
          ),
          array (
            'id' => '190',
            'bom_level' => '4',
            'parent_item_no' => '2000CF-12',
            'comp_item_no' => '2000CF-SH11',
          ),
          array (
            'id' => '222',
            'bom_level' => '5',
            'parent_item_no' => '2000CF-SH11',
            'comp_item_no' => '1000',
          ),
          array (
            'id' => '191',
            'bom_level' => '4',
            'parent_item_no' => '2000CF-12',
            'comp_item_no' => '2000CF-SH12',
          ),
          array (
            'id' => '223',
            'bom_level' => '5',
            'parent_item_no' => '2000CF-SH12',
            'comp_item_no' => '1000',
          ),
          array (
            'id' => '67',
            'bom_level' => '3',
            'parent_item_no' => '2800CF-02',
            'comp_item_no' => '2000CF-AG01',
          ),
          array (
            'id' => '192',
            'bom_level' => '4',
            'parent_item_no' => '2000CF-AG01',
            'comp_item_no' => '303025-20',
          ),
          array (
            'id' => '68',
            'bom_level' => '3',
            'parent_item_no' => '2800CF-02',
            'comp_item_no' => '2000CF-PL13',
          ),
          array (
            'id' => '193',
            'bom_level' => '4',
            'parent_item_no' => '2000CF-PL13',
            'comp_item_no' => '0500',
          ),
          array (
            'id' => '69',
            'bom_level' => '3',
            'parent_item_no' => '2800CF-02',
            'comp_item_no' => '2000CF-PL14',
          ),
          array (
            'id' => '194',
            'bom_level' => '4',
            'parent_item_no' => '2000CF-PL14',
            'comp_item_no' => '0187',
          ),
          array (
            'id' => '70',
            'bom_level' => '3',
            'parent_item_no' => '2800CF-02',
            'comp_item_no' => '2000CF-SQ01',
          ),
          array (
            'id' => '195',
            'bom_level' => '4',
            'parent_item_no' => '2000CF-SQ01',
            'comp_item_no' => '050018-20',
          ),
          array (
            'id' => '71',
            'bom_level' => '3',
            'parent_item_no' => '2800CF-02',
            'comp_item_no' => '2000CF-WB06',
          ),
          array (
            'id' => '196',
            'bom_level' => '4',
            'parent_item_no' => '2000CF-WB06',
            'comp_item_no' => '040013-20',
          ),
        );
        
        function helper($children, $map) {
          if (sizeof($children) > 0) {
            echo '<ul>';
            foreach ($children as $parentId => $child) {
              echo '<li>';
              echo $child['comp_item_no'];
              if ($child['comp_item_no'] !== $child['parent_item_no'] && isset($map[$child['comp_item_no']])) {
                helper($map[$child['comp_item_no']], $map);
              }
              echo '</li>';
            }
            echo '</ul>';
          }
        }
        
        /**
         * note that '2800CF' here is manually choosen
         * because it has the lowest bom_level! In your real
         * code you might want to capture those nodes while
         * restructuring the array (see above)
         */
        helper($map['2800CF'], $map); 
        
        其中,
        comp\u item\u no
        是唯一的,
        parent\u item\u no
        指向它的父节点。其中,
        parent\u item\u no=0
        是根节点

        您可以使用以下工具将其映射到另一个结构:

        $map = array();
        foreach ($data as $entry) {
          if (!isset($map[$entry['parent_item_no']])) {
            $map[$entry['parent_item_no']] = array();
          }
        
          $map[$entry['parent_item_no']][] = $entry;
        }
        
        然后可以递归地遍历,如下所示:

        // plus any additional data per entry
        $data = array (
          array (
            'id' => '10',
            'bom_level' => '2',
            'parent_item_no' => '2800CF',
            'comp_item_no' => '2800CF-02',
          ),
          array (
            'id' => '66',
            'bom_level' => '3',
            'parent_item_no' => '2800CF-02',
            'comp_item_no' => '2000CF-12',
          ),
          array (
            'id' => '189',
            'bom_level' => '4',
            'parent_item_no' => '2000CF-12',
            'comp_item_no' => '0578',
          ),
          array (
            'id' => '190',
            'bom_level' => '4',
            'parent_item_no' => '2000CF-12',
            'comp_item_no' => '2000CF-SH11',
          ),
          array (
            'id' => '222',
            'bom_level' => '5',
            'parent_item_no' => '2000CF-SH11',
            'comp_item_no' => '1000',
          ),
          array (
            'id' => '191',
            'bom_level' => '4',
            'parent_item_no' => '2000CF-12',
            'comp_item_no' => '2000CF-SH12',
          ),
          array (
            'id' => '223',
            'bom_level' => '5',
            'parent_item_no' => '2000CF-SH12',
            'comp_item_no' => '1000',
          ),
          array (
            'id' => '67',
            'bom_level' => '3',
            'parent_item_no' => '2800CF-02',
            'comp_item_no' => '2000CF-AG01',
          ),
          array (
            'id' => '192',
            'bom_level' => '4',
            'parent_item_no' => '2000CF-AG01',
            'comp_item_no' => '303025-20',
          ),
          array (
            'id' => '68',
            'bom_level' => '3',
            'parent_item_no' => '2800CF-02',
            'comp_item_no' => '2000CF-PL13',
          ),
          array (
            'id' => '193',
            'bom_level' => '4',
            'parent_item_no' => '2000CF-PL13',
            'comp_item_no' => '0500',
          ),
          array (
            'id' => '69',
            'bom_level' => '3',
            'parent_item_no' => '2800CF-02',
            'comp_item_no' => '2000CF-PL14',
          ),
          array (
            'id' => '194',
            'bom_level' => '4',
            'parent_item_no' => '2000CF-PL14',
            'comp_item_no' => '0187',
          ),
          array (
            'id' => '70',
            'bom_level' => '3',
            'parent_item_no' => '2800CF-02',
            'comp_item_no' => '2000CF-SQ01',
          ),
          array (
            'id' => '195',
            'bom_level' => '4',
            'parent_item_no' => '2000CF-SQ01',
            'comp_item_no' => '050018-20',
          ),
          array (
            'id' => '71',
            'bom_level' => '3',
            'parent_item_no' => '2800CF-02',
            'comp_item_no' => '2000CF-WB06',
          ),
          array (
            'id' => '196',
            'bom_level' => '4',
            'parent_item_no' => '2000CF-WB06',
            'comp_item_no' => '040013-20',
          ),
        );
        
        function helper($children, $map) {
          if (sizeof($children) > 0) {
            echo '<ul>';
            foreach ($children as $parentId => $child) {
              echo '<li>';
              echo $child['comp_item_no'];
              if ($child['comp_item_no'] !== $child['parent_item_no'] && isset($map[$child['comp_item_no']])) {
                helper($map[$child['comp_item_no']], $map);
              }
              echo '</li>';
            }
            echo '</ul>';
          }
        }
        
        /**
         * note that '2800CF' here is manually choosen
         * because it has the lowest bom_level! In your real
         * code you might want to capture those nodes while
         * restructuring the array (see above)
         */
        helper($map['2800CF'], $map); 
        
        函数助手($children$map){
        如果(sizeof($children)>0){
        回声“
          ”; foreach($parentId=>$child的子对象){ 回音“
        • ”; echo$child['comp_item_no']; if($child['comp\u item\u no']!=$child['parent\u item\u no']&&isset($map[$child['comp\u item\u no'])){ 助手($map[$child['comp\u item\u no']],$map); } 回音“
        • ”; } 回声“
        ”; } } /** *请注意,此处的“2800CF”是手动选择的 *因为它有最低的bom_级别!在你的真实世界里 *您可能希望捕获这些节点的代码 *重组阵列(见上文) */ 助手($map['2800CF',$map);
        要生成嵌套的ul示例(用于上面的数据):

        <<
      • 050018-20
        • 2000CF-WB06
          • 040013-20
            演示:

            我感觉这里的BOM表不代表浏览器对象模型…很好!更新的问题一致我感觉这里的BOM表不代表浏览器对象模型…很好!更新的问题一致当你说“父对象指向它的父对象”时,你是指父对象指向它的父ID吗?如果是这样的话(我想是的)我不知道如何从表中推断,因为“parent_ID”不可用。只有parent_Item_no(即零件号)。我确信这是可能的,我只是不知道如何做。我尝试过类似的方法,但没有用:if($parent_Item_no==$oldpent_Item_no){$parentid=$oldd;}else{$parentid=$id;$oldid=$id;}我应该添加一些细节:我正在尝试循环调用的结果,并将该数据馈送到一个数组中,该数组与您在示例数组(id、parentid、component\u item\u no)中提供的数据结构相匹配。上面的代码行在循环中,试图通过将父项编号与前一个父项编号进行比较来推断父项ID。是的,我的意思是
            parent
            作为实际父项的ID。也许您可以添加一些实际使用的数据(可能使用var\u export或其他方法),因此我可以修改示例代码。根据您编写的内容(
            “父项ID”不可用。只有父项编号(即零件号)
            )我想,你可以用
            parent\u Item\u no
            更改
            parent
            ,用Item no更改
            id
            。唯一需要做的是,无论你选择哪个条目的id,它都必须是唯一的。感谢你迄今为止的帮助:下面是一个表的示例:当你说“parent指向它的parent's”你是说parent指向它的parent's ID吗?如果是这种情况(我认为是这样),我不知道如何从表中推断出来,因为“parent\u ID”不可用。只有parent\u Item\u no(零件号)。我确信这是可能的,我只是不知道怎么做。我试过这样做,但没有效果:如果($parentid=$OldParentID=$oldid;}否则{$parentid=$id;$oldid=$id;}我应该添加一些细节:我正在尝试循环调用的结果,并将该数据馈送到一个数组中,该数组与您在示例数组中提供的数据结构相匹配(id、parentid、component\u item\u no)。上面的代码行在循环中,试图通过将父项编号与前一个父项编号进行比较来推断父项ID。是的,我的意思是将
            parent
            作为实际父项的ID。也许您可以添加一些实际使用的数据(可能使用var\u导出或其他方法),这样我就可以调整e