Я искал и не могу найти ничего, связанного с моей проблемой. Я предполагаю, что это будет распространенной проблемой для кодеров, работающих в форматах макета (например, PDF).
Вот моя проблема. Я делаю PDF-файлы в FPDF, используя PHP 7.x, и мне нужно максимально использовать вертикальное пространство на получающейся странице, создав несколько столбцов примерно одинаковой длины. Учитывая один массив массивов различной длины, мне нужно создать массив, содержащий X столбцов элементов, переупорядоченных должным образом, чтобы я мог использовать полученный массив для добавления столбцов в PDF. Хитрость заключается в том, чтобы упорядочить их так, чтобы все столбцы оказались как можно ближе к одинаковой длине.
Вот мой массив:
<?php
$array = [
'Section A Title' =>
[
'Footing',
'Framing',
'Electrical Rough',
'Electrical Finish',
'Plumbing Rough',
'Final Inspection'
],
'Section B Title' =>
[
'Floor/Interior',
'Concrete flatwork preparation'
],
'Section C Title' =>
[
'Building',
'Zoning',
'Road Access'
],
'Section D Title' =>
[
'Private utility lines identified and marked',
'Site Preparation (pre-construction)',
'Purchase of (pre-construction) fill material',
'Obstruction removal',
'Termite pre-treatment',
'Final/Finish grading',
'Dumpster/Trash removal',
'Utility line marking/digging clearance'
],
'Section E Title' =>
[
'Temporary electrical service',
'Permanent electrical rough-in/hookup',
'Gas service rough-in/hookup'
]
];
Если два столбца желательны, то результирующий массив будет выглядеть следующим образом (обратите внимание, что столбец 0 дает 14 строк, а столбец 1 имеет 13 строк)):
<?php
$result = [
'0' => //Column 1
['Section A Title' =>
[
'Footing',
'Framing',
'Electrical Rough',
'Electrical Finish',
'Plumbing Rough',
'Final Inspection'
],
['Section B Title' =>
[
'Floor/Interior',
'Concrete flatwork preparation'
],
['Section C Title' =>
[
'Building',
'Zoning',
'Road Access'
]
],
'1' => //Column 2
['Section D Title' =>
[
'Private utility lines identified and marked',
'Site Preparation (pre-construction)',
'Purchase of (pre-construction) fill material',
'Obstruction removal',
'Termite pre-treatment',
'Final/Finish grading',
'Dumpster/Trash removal',
'Utility line marking/digging clearance'
],
['Section E Title' =>
[
'Temporary electrical service',
'Permanent electrical rough-in/hookup',
'Gas service rough-in/hookup'
]
]
];