我正在迭代放置在容器中的一系列盒子。例如,一个容器可以存储“ 10”级的盒子。如果数组为[6,5,2]。我将有两个容器:一个包含[6,2]和一个包含[5],对数组进行了迭代,它抓住了6,跳过了5,抓住了2。由于6 + 5为11,所以跳过了5。容器不能有更多容器而不是10级。跳过的5将放置在单独的数组中,以便稍后进行迭代。
下面我总结我的问题。这不是工作代码。我只是在讲我的问题。
$boxes = [2, 3, 2, 5, 8, 2, 10, 2, 5, 6]; // my boxes
$separated_boxes = [];
$items = [];
for($i = 0; $i < count($boxes); $i++){
$items[] = $box[$i]; //add box to array
$result = Class::packBoxes($items) // check if the box(es) can be packed
//if the current box cannot be packed it is separated
if($result == false)
{
$separated_boxes[] = $box[$i];
}
//if the loop reaches the end a new loop should start with the separated boxes
//Apparently I cannot do this because the for conditions are avalidated only once
if((($i + 1) == count($boxes) && count($separated_boxes) > 0)){
$itens = [];
$i = 0;
$boxes= $separated_boxes;
$separated_boxes= [];
}
}
packBoxes($boxes)
{
if(canPack($box)
{
return true;
}
else{
return false;
}
}
我该如何解决这个问题?
答案 0 :(得分:0)
您正在考虑使用错误的循环方式。类似于for
的循环通常用于对输入一次中的每个项目执行某项操作。
但这不是您所需要的。您需要反复检查输入 中的项目,将它们放在一旁再找回来,直到所有项目都分发到容器中为止。
有很多方法可以编写此代码(循环,迭代器,递归函数,带有逻辑的对象...)。在循环方面,您可以像这样尝试do-while
:
do {
// take items out of $boxes until you fill <=10 units container
} while( ! empty( $boxes ) );