public function isItemCeilPlaced(Item $item) { $reverseFloor = []; $ceilLength = $this->getRemainCeilLength(); foreach ($this->floor as $i) { if ($i->getItem()->getLength() <= $ceilLength) { $reverseFloor[] = $i; $ceilLength -= $i->getItem()->getLength(); continue; } break; } if (empty($reverseFloor)) { return false; } $reverseFloor = array_reverse($reverseFloor); $length = $this->getRemainFloorLength(); /** @var LevelItem $i */ foreach ($reverseFloor as $i) { if ($item->getLength() <= ($length += $i->getItem()->getLength())) { if ($item->getHeight() <= $i->getRemainHeight()) { return true; } break; } } }