Как сгруппировать несколько посылок в одну с помощью PHP

Мне нужна формула, которая поможет мне сгруппировать несколько посылок в одну.

У меня есть объект Parcel, подобный этому:

<?php

class Parcel {
    function __construct($length,$width,$height,$weight) {
        $this->length=$length;
        $this->width=$width;
        $this->height=$height;
        $this->weight=$weight;
    }

    private $length;
    private $width;
    private $height;
    private $weight;

    public function getParcelDetails()
    {
        echo "length = ".$this->length."<br>";
        echo "width  = ".$this->width."<br>";
        echo "height = ".$this->height."<br>";
        echo "weight = ".$this->weight ."<br>";
    }

    public static function mergeParcels($parcels){
        $new_parcel_length=0;
        $new_parcel_width=0;
        $new_parcel_height=0;
        $new_parcel_weight=0;
        foreach ($parcels as $key => $parcel) {
            # What is the formula that can create a new parcel which is enable to contain the parcels $parcels ?

            # The weight will be just additionned
            $new_parcel_weight+=$parcel->$weight;
        }

        $new_parcel= new static($new_parcel_length,$new_parcel_width,$new_parcel_height,$new_parcel_weight);

        return $new_parcel;
    }
}

Цель состоит в том, чтобы объединить посылки в одну, поэтому в основном скрипте у меня будет что-то вроде этого:

$parcel1=new Parcel(10,10,10,1);
$parcel2=new Parcel(5,5,5,1);

//$parcel1->getParcelDetails();
//$parcel2->getParcelDetails();

$new_parcel=Parcel::mergeParcels([$parcel1,$parcel2]);

$new_parcel->getParcelDetails();

Эта картинка может продемонстрировать проблему: Как сгруппировать несколько посылок в одну с помощью PHP

Обратите внимание, что проблема заключается в том, что у меня есть несколько участков, размеры которых не равны.

Если размеры равны, я могу просто добавить их друг к другу, но на самом деле у меня нет решения, когда размеры не совпадают.

Почему вы отметили java?

Lino 22.03.2019 11:45

PHP или Java? Вы уверены? Ваш код - это просто PHP.

Script47 22.03.2019 11:45

@ Script47 формула будет такой же, независимо от языка.

AIT MANSOUR Mohamed 22.03.2019 11:46

@AITMANSOURMohamed, если вам нужна только формула, не отмечайте какой-либо язык программирования, если вам нужна формула в php, просто отмечайте php

Lino 22.03.2019 11:47

Смотрите картинку. Что должно произойти, если у меня есть только посылки 1, 2 и 3, а я попытался их объединить? должен ли он стать некоробчатым?

Rizki Hadiaturrasyid 22.03.2019 11:47

@AITMANSOURMohamed, но код будет значительно отличаться, если вам просто нужна формула, возможно, лучше по адресу: math.stackexchange.com - проверьте их тур, прежде чем спрашивать.

Script47 22.03.2019 11:47

@RizkiHadiaturrasyid нет, он может иметь форму коробки, даже если есть свободное место,

AIT MANSOUR Mohamed 22.03.2019 11:51
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
7
90
1

Ответы 1

Ваша проблема программирования называется проблема с упаковкой рюкзака, подмножество задач комбинаторной оптимизации.

Небольшие проблемы можно решить с помощью динамического программирования, а более крупные — с помощью эвристики.

Подробнее об этом можно прочитать здесь и здесь.

Обратите внимание, что крупномасштабные комбинаторные решатели — это целая индустрия, требующая многолетних исследований и разработок.

Другие вопросы по теме