Сломал голову думая над одним достаточно простым вопросом.
Есть область шириной 4 условные единицы. Внутри у нее строки длинной и шириной 4 условные единицы. В область, генерятся блоки разных размеров: 4x4 2x4 1x1. Вся сложность в том, что-бы вовремя закрыть строку, и перейти на новую. В строку влезает один 4x4, два 2x4, и четыре шутки 1x1, есть еще вариант со строкой с одним 2x4 и двумя 1x1.
Написал такой код, но работает не очень.
UPD: Добавил нормальный пример$b_array = array(
"1" => array("WIDTH" => "2"),
"2" => array("WIDTH" => "2"),
"3" => array("WIDTH" => "2"),
"4" => array("WIDTH" => "2"),
"5" => array("WIDTH" => "2"),
"6" => array("WIDTH" => "2"),
);
function generate_metro($array) {
static $metro_iw;
$metro_iw = 0;
foreach($array as $item) {
$block_width = $item["WIDTH"];
if((intval($metro_iw/4) < intval(($metro_iw+$block_width)/4)) && (intval($metro_iw/4) !== 0)) {
$out .= "</div><div class='as_metro_line'> |--1--| ";
$metro_iw += $block_width;
}
else {
$out .= "|--1--|";
$metro_iw += $block_width;
}
}
return $header."<div class='as_metro_line'>".$out."</div>";
}
echo generate_metro($b_array);
Вот код примера, вместо сортировки
1-1
1-1
1-1
Он сортирует
1-1-1
1-1
1