Php 通过jquery可折叠动态BOM?
我有一个php页面,它从sql2000存储过程中提取数据,表示产品的BOM(物料清单)。现在它显示为一个平板,效果非常好。然而,经过3天的谷歌搜索/黑客攻击,我一辈子都搞不清楚如何将这些数据转换成缩进的可折叠/可扩展表或UL 附表如下: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', '
- 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);
要生成嵌套的ul示例(用于上面的数据): <函数助手($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); } 回音“ ”; } 回声“
- <
- 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);
要生成嵌套的ul示例(用于上面的数据): <函数助手($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); } 回音“ ”; } 回声“
- <
- 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。是的,我的意思是
作为实际父项的ID。也许您可以添加一些实际使用的数据(可能使用var\u export或其他方法),因此我可以修改示例代码。根据您编写的内容(parent
)我想,你可以用“父项ID”不可用。只有父项编号(即零件号)
更改parent\u Item\u no
,用Item no更改parent
。唯一需要做的是,无论你选择哪个条目的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。是的,我的意思是将id
作为实际父项的ID。也许您可以添加一些实际使用的数据(可能使用var\u导出或其他方法),这样我就可以调整eparent
- 040013-20
- 040013-20