PHP: Найдите "лучший вариант"

Мне нужно, чтобы $quantities поместился в $sections, чтобы не осталось никаких количеств.

Также product_id 1 не может находиться вместе с product_id 2 в одном разделе.

Сумма объемов $quantities всегда равна или меньше суммы объемов $sections.

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

Я пробовал зацикливать каждую секцию с одним количеством за раз, но это приводит к тому, что первое количество идет в первых 4 разделах, поэтому объем разделов составляет 14000, но количество в них составляет 13000.

$quantities = array(
    0 => array(
        'volume' => '13000',
        'product_id' => '2'
    ),
    1 => array(
        'volume' => '24000',
        'product_id' => '1'
    )
);


$sections = array(
    44 => array(
        'id' => '44',
        'volume' => '2000.00'
    ),
    41 => array(
        'id' => '41',
        'volume' => '3000.00'
    ),
    45 => array(
        'id' => '45',
        'volume' => '4000.00'
    ),
    46 => array(
        'id' => '46',
        'volume' => '5000.00'
    ),
    48 => array(
        'id' => '48',
        'volume' => '5000.00'
    ),
    42 => array(
        'id' => '42',
        'volume' => '5000.00'
    ),
    43 => array(
        'id' => '43',
        'volume' => '6000.00'
    ),
    47 => array(
        'id' => '47',
        'volume' => '7000.00'
    )
);

Например, результат должен выглядеть примерно так:

   $output = array(
        0 => array(
            'section_id' => 43,
            'volume' => 6000,
            'product_id' => 2
        ),
        1 => array(
            'section_id' => 47,
            'volume' => 7000,
            'product_id' => 2
        ),
        2 => array(
            'section_id' => '44',
            'volume' => 2000,
            'product_id' => 1
        ),
        3 => array(
            'section_id' => '41',
            'volume' => 3000,
            'product_id' => 1
        ),
        4 => array(
            'section_id' => '45',
            'volume' => 4000,
            'product_id' => 1
        ),
        5 => array(
            'section_id' => '46',
            'volume' => 5000,
            'product_id' => 1
        ),
        6 => array(
            'section_id' => '48',
            'volume' => 5000,
            'product_id' => 1
        ),
        7 => array(
            'section_id' => '42',
            'volume' => 5000,
            'product_id' => 1
        ),
    );

Покажите нам, какой результат вы ожидаете?

MorganFreeFarm 24.07.2018 09:21

Я обновил исходный пост

R R 24.07.2018 09:29

Возможно ли, что количество никогда не будет достигнуто? (По количеству продукта 2 с 48000)

dWinder 24.07.2018 10:00

Тогда сумма заданных величин всегда равна или меньше суммы сечений.

R R 24.07.2018 10:04

Я предполагаю, что $sections всегда сортируется по объему

david 24.07.2018 10:07

Да, массив разделов всегда сортируется по объему

R R 24.07.2018 10:08

Это похоже на проблема с упаковкой бункера, который является NP-трудным и, как таковой, не легко разрешим. Тем не менее, страница википедии даст вам некоторые алгоритмы для начала.

Yoshi 24.07.2018 10:19

Если обобщить проблему - вам нужно найти подмассивы для каждой из величин. Вы можете найти больше информации здесь: поиск-под-массив-сумма-в-целочисленном-массиве

dWinder 24.07.2018 10:24
Стоит ли изучать 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 и хотите разрабатывать...
0
8
142
0

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