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

PHP项目中多级层级ID生成需求:容器-盒子-产品层级ID设计

Hierarchical ID Generation for Products, Boxes, and Containers in PHP

Got it, let's tackle this hierarchical ID problem for your PHP project. The key here is to create IDs that inherently carry relational information—so you don't have to jump through extra hoops to map boxes to products or containers to boxes. Since your structure is strictly 10 products per box and 10 boxes per container, we can lean into that 10x10x10 hierarchy with two straightforward approaches.

Approach 1: Numeric Segment IDs (Best for Sequential Product IDs)

If your product IDs are sequential integers (e.g., 1, 2, ..., 1000 for 10 containers total), you can derive box and container IDs directly from the product ID without needing extra database tables. Here's how it works:

ID Logic

  • Box ID: For any product ID, the box ID is determined by grouping every 10 products. For example, products 1-10 → Box 1, 11-20 → Box 2, ..., 91-100 → Box 10 (which belongs to Container 1).
  • Container ID: Group every 10 boxes into a container. So Boxes 1-10 → Container 1, 11-20 → Container 2, etc.

PHP Code Implementation

// Get Box ID from a Product ID
function getBoxIdFromProductId(int $productId): int {
    // Using floor() ensures we correctly group 1-10 into Box 1, not 0
    return (int)floor(($productId - 1) / 10) + 1;
}

// Get Container ID from a Box ID
function getContainerIdFromBoxId(int $boxId): int {
    return (int)floor(($boxId - 1) / 10) + 1;
}

// Get all Product IDs associated with a Box ID
function getProductIdsForBox(int $boxId): array {
    $start = ($boxId - 1) * 10 + 1;
    $end = $boxId * 10;
    return range($start, $end);
}

// Get all Box IDs associated with a Container ID
function getBoxIdsForContainer(int $containerId): array {
    $start = ($containerId - 1) * 10 + 1;
    $end = $containerId * 10;
    return range($start, $end);
}

// Get all Product IDs associated with a Container ID
function getProductIdsForContainer(int $containerId): array {
    $start = ($containerId - 1) * 100 + 1;
    $end = $containerId * 100;
    return range($start, $end);
}

Example Usage

// Product ID 45 → Box 5, Container 1
echo getBoxIdFromProductId(45); // Output: 5
echo getContainerIdFromBoxId(5); // Output: 1

// Get all products in Box 5: 41-50
print_r(getProductIdsForBox(5));

// Get all products in Container 2: 101-200
print_r(getProductIdsForContainer(2));

Approach 2: Structured String IDs (Best for Non-Sequential or Human-Readable IDs)

If your product IDs aren't sequential, or you want IDs that clearly indicate their hierarchy (e.g., easy to tell a product belongs to Box 3 of Container 2), use a formatted string ID. For example:

  • Product ID: C02B03P07 (Container 2, Box 3, Product 7)
  • Box ID: C02B03
  • Container ID: C02

PHP Code Implementation

// Extract Box ID from a structured Product ID
function getBoxIdFromProductId(string $productId): string {
    // Assume format: CxxBxxPxx (xx = 2-digit number)
    return substr($productId, 0, 5);
}

// Extract Container ID from a structured Product ID
function getContainerIdFromProductId(string $productId): string {
    return substr($productId, 0, 3);
}

// Generate all Product IDs for a given Box ID
function getProductIdsForBox(string $boxId): array {
    $productIds = [];
    // Loop through 1-10 to generate product suffixes
    for ($i = 1; $i <= 10; $i++) {
        $productIds[] = $boxId . sprintf('P%02d', $i);
    }
    return $productIds;
}

Example Usage

// Product ID "C02B03P07" → Box ID "C02B03", Container ID "C02"
echo getBoxIdFromProductId("C02B03P07"); // Output: C02B03
echo getContainerIdFromProductId("C02B03P07"); // Output: C02

// Get all products in Box "C02B03"
print_r(getProductIdsForBox("C02B03"));

What If Product IDs Are Non-Sequential and Unstructured?

If your existing product IDs don't follow a pattern, you'll need to store associations in your database:

  • Create a boxes table with box_id and add a foreign key in the products table pointing to box_id (since each product belongs to exactly one box).
  • Create a containers table with container_id and add a foreign key in the boxes table pointing to container_id.

This way, you can use SQL joins to fetch all products for a box, or all boxes/products for a container.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:38:11