How can the bin packing problem be applied to optimizing shipping costs in PHP for multiple product types and shipping options?

The bin packing problem can be applied to optimizing shipping costs by efficiently packing multiple product types into shipping containers to minimize the number of containers used. This can be achieved by using algorithms such as First Fit Decreasing (FFD) or Best Fit Decreasing (BFD) to pack items into containers based on their size and weight. By optimizing the packing process, shipping costs can be reduced by maximizing the space utilization of each container.

```php
// Sample PHP code snippet for optimizing shipping costs using bin packing

// Define the products with their respective sizes and weights
$products = [
    ['name' => 'Product A', 'size' => 5, 'weight' => 2],
    ['name' => 'Product B', 'size' => 7, 'weight' => 3],
    ['name' => 'Product C', 'size' => 3, 'weight' => 1],
    // Add more products as needed
];

// Define the shipping container size and weight capacity
$containerSize = 10;
$containerWeight = 5;

// Implement bin packing algorithm (e.g., First Fit Decreasing)
function packProducts($products, $containerSize, $containerWeight) {
    // Sort products by size in descending order
    usort($products, function($a, $b) {
        return $b['size'] - $a['size'];
    });

    $containers = [];
    foreach ($products as $product) {
        $packed = false;
        foreach ($containers as &$container) {
            if ($container['size'] >= $product['size'] && $container['weight'] + $product['weight'] <= $containerWeight) {
                $container['size'] -= $product['size'];
                $container['weight'] += $product['weight'];
                $container['products'][] = $product['name'];
                $packed = true;
                break;
            }
        }
        if (!$packed) {
            $containers[] = ['size' => $containerSize - $product['size'], 'weight' => $product['weight'], 'products' => [$product['name']]];
        }
    }

    return $containers;
}

// Pack products into containers
$packedContainers = packProducts($products, $containerSize, $containerWeight);

// Output the packed containers and their contents
foreach ($packedContainers as $key => $container) {
    echo "Container " . ($