@Vostrikov

Алгоритм распределения элементов массива по стоблцам с учетом веса элемента?

Исходный массив:
$ar = [
    ['items' => ['a', 'b', 'c']],
    ['items' => ['b', 'c']],
    ['items' => ['a']],
    ['items' => ['a', 'b', 'c', 'd']],
    ['items' => ['a']],
    ['items' => ['b']],
    ['items' => ['c']],
];

В чем состоит задача:
Нужно распределить по 3 столбцам с минимальной разницей по количеству элементов с учетом количества items.

Получиться должно так:
$ar = [
    0 => [
        ['items' => ['a', 'b', 'c']],
        ['items' => ['b', 'c']],
    ],
    1 => [
        ['items' => ['a']],
        ['items' => ['a', 'b', 'c', 'd']],
    ],
    2 => [
        ['items' => ['a']],
        ['items' => ['b']],
        ['items' => ['c']],
    ]
];
  • Вопрос задан
  • 447 просмотров
Пригласить эксперта
Ответы на вопрос 1
Falseclock
@Falseclock
решаю нестандартные задачи
<?php

$ar = [
    ['items' => ['a', 'b', 'c']],
    ['items' => ['b', 'c']],
    ['items' => ['a']],
    ['items' => ['a', 'b', 'c', 'd']],
    ['items' => ['a']],
    ['items' => ['b']],
    ['items' => ['c']],
];

print_r(splitter($ar));

function splitter($array, $columns=3)
{
	$return = array();
	$per_column = intval(count($array) / $columns);

	$i = 0;
	$column = 0;
    foreach ($array as $key => $row) {
		if ($column < $columns-1) {
			if ($i >= $per_column) {
				$column++;
				$i = 0;
			}
		}
		$return[$column][] = $row;
		$i++;
    }
	return $return;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы