gpt4 book ai didi

php - 我怎样才能使这个功能更简单?未知的数组深度

转载 作者:行者123 更新时间:2023-11-29 15:13:45 25 4
gpt4 key购买 nike

我带着另一个问题回来了。

我正在尝试遍历一个数组并列出与类别和子类别的父 ID 匹配的所有商品,然后列出子类别的库存中的商品。

我需要在单击按钮时显示该类别中的所有项目。

我有一个像这样的 TreeView

Tree View

当您点击 M8 或 316SS 时,它会显示 M8 中的项目,或者显示 316SS 类别中的所有项目。

我需要这样做,但在每个级别上也需要这样做,但是我当前使用的代码不适用于它。

这是哪个

<?php

include 'classLoader.php';

if (isset($_GET['id']) && !empty($_GET['id'])) {
$items = DB::query("SELECT * FROM inventory WHERE parent=:parent", array(":parent" => $_GET['id']));
if (!empty($items)) {
$data = array();
foreach ($items as $item_key => $item) {
$data["data"][] = array('<a href="/CRM/viewOpportunity/" class="link icon-only"><i class="icon material-icons">open_in_new</i></a><a class="link icon-only"><i class="icon material-icons">edit</i></a>', $item['item'], $item['supplier_product_code'], $item['price_per_unit'], $item['current_stock'], $item['category'], '<a class="link icon-only"><i class="icon material-icons">delete</i></a>');
}

header("Content-Type: application/json");
echo json_encode($data, JSON_PRETTY_PRINT);
} else {
$categories = DB::query("SELECT * FROM categories WHERE parent=:id", array(":id" => $_GET['id']));
$data = array();
foreach ($categories as $cat_key => $cat) {

$items = DB::query("SELECT * FROM inventory WHERE parent=:parent", array(":parent" => $cat['id']));

foreach ($items as $item_key => $item) {
$data["data"][] = array('<a href="/CRM/viewOpportunity/" class="link icon-only"><i class="icon material-icons">open_in_new</i></a><a class="link icon-only"><i class="icon material-icons">edit</i></a>', $item['item'], $item['supplier_product_code'], $item['price_per_unit'], $item['current_stock'], $item['category'], '<a class="link icon-only"><i class="icon material-icons">delete</i></a>');
}

}

header("Content-Type: application/json");
echo json_encode($data, JSON_PRETTY_PRINT);
}
}
?>

当这不起作用时,我尝试了以下代码(删减但它几乎重复了 10 次)。这段代码可以工作,但它是资源密集型的,而且只能深入这么多。我需要一个能够继续跟踪它,直到它无处可去为止。

<?php

include 'classLoader.php';

if (isset($_GET['id']) && !empty($_GET['id'])) {
$items = DB::query("SELECT * FROM categories WHERE parent=:id", array(":id" => $_GET['id']));
$d = array();
if (!empty($items)) {
foreach ($items as $item_key => $item) {
$d[] = $item['category_name'];
$subItems = DB::query("SELECT * FROM categories WHERE parent=:catID", array(":catID" => $item['id']));
foreach ($subItems as $item_key => $item) {
$d[] = $item['category_name'];
$subItems = DB::query("SELECT * FROM categories WHERE parent=:catID", array(":catID" => $item['id']));
foreach ($subItems as $item_key => $item) {
$d[] = $item['category_name'];
$subItems = DB::query("SELECT * FROM categories WHERE parent=:catID", array(":catID" => $item['id']));
foreach ($subItems as $item_key => $item) {
$d[] = $item['category_name'];
$subItems = DB::query("SELECT * FROM categories WHERE parent=:catID", array(":catID" => $item['id']));
foreach ($subItems as $item_key => $item) {
$d[] = $item['category_name'];
$subItems = DB::query("SELECT * FROM inventory WHERE parent=:catID", array(":catID" => $item['id']));

}
}
}
}
}
}

header("Content-Type: application/json");
echo json_encode($d, JSON_PRETTY_PRINT);
}

?>

有没有办法让这个函数在某种意义上“递归”?数据库是这样的

# categories
| category_name | parent |
| Fasteners | 0 |
| Bolts | 1 |
| 316SS | 2 |
| M8 | 3 |
# inventory
| item | parent |
| 20 | 0 |
| 30 | 1 |

这些表中都有超过 3000 个独特的项目。

抱歉,这个问题质量非常低。

最佳答案

已解决。

我使用了以下代码。

$cats = DB::query("SELECT * FROM categories");

$r = fetch_recursive($cats, $_GET['id']);

foreach ($r as $cat_key => $cat) {
$items = DB::query("SELECT * FROM inventory WHERE parent=:parent", array(":parent" => $cat['id']));

foreach ($items as $item_key => $item) {
$data["data"][] = array('<a href="/CRM/viewOpportunity/" class="link icon-only"><i class="icon material-icons">open_in_new</i></a><a class="link icon-only"><i class="icon material-icons">edit</i></a>', $item['item'], $item['supplier_product_code'], $item['price_per_unit'], $item['current_stock'], $item['category'], '<a class="link icon-only"><i class="icon material-icons">delete</i></a>');
}
}


function fetch_recursive($src_arr, $id, $parentfound = false, $cats = array())
{
foreach($src_arr as $row)
{
if((!$parentfound && $row['id'] == $id) || $row['parent'] == $id)
{
$rowdata = array();
foreach($row as $k => $v)
$rowdata[$k] = $v;
$cats[] = $rowdata;
if($row['parent'] == $id)
$cats = array_merge($cats, fetch_recursive($src_arr, $row['id'], true));
}
}
return $cats;
}

关于php - 我怎样才能使这个功能更简单?未知的数组深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59868563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com