AOC, day 9, part 2

<?php

$input = file_get_contents('./d9input1.txt', true);

$line = preg_split("/((\r?\n)|(\r\n?))/", $input);

$dmap = str_split($line[0]);

$lay = array(); // layout
$fno = 0; // file number
$fmode = 1; // file mode, 1 for file, 0 for empty space
$full = array(); // list of files
$empty = array(); // list of empty stretches
for( $i = 0; $i < sizeof($dmap); $i += 1) { 
	if($fmode == 1) {
		$full[] = array(sizeof($lay), $dmap[$i], $fno);
		for($j=0;$j<$dmap[$i];$j++) {
			$lay[] = $fno;
		}
		$fmode = 0;
		$fno++;
	} else {
		$empty[] = array(sizeof($lay), $dmap[$i]);
		for($j=0;$j<$dmap[$i];$j++) {
			$lay[] = ".";
		}
		$fmode = 1;
	}
} 

$full = array_reverse($full);
foreach($full as $file) {
	// find better spot
	$fpos = $file[0];
	$fsiz = $file[1];
	$fval = $file[2];
	$found = 0;
	for($i=0;$i<sizeof($empty);$i++) {
		$epos = $empty[$i][0];
		$esiz = $empty[$i][1];
		if($fpos < $epos) { // don't move the file right
			break;
		}
		if($fsiz <= $esiz) {
			$found = 1;
			break;
		}
	}
	// $i will be used again later
	if($found == 0) {
		continue;
	}
	// copy file
	for($j=$epos;$j<$epos+$fsiz;$j++) {
		$lay[$j] = $fval;
	}
	if($fsiz < $esiz) {
		$empty[$i][0] += $fsiz;
		$empty[$i][1] -= $fsiz;
	} else {
		unset($empty[$i]);
		$empty = array_values($empty);
	}
	// delete old spot
	for($j=$fpos;$j<$fpos+$fsiz;$j++) {
		$lay[$j] = ".";
		// should also update list of empty space, but...
	}
	
}

$sum = 0;
$pos = 0;
for($i=0;$i<sizeof($lay);$i++) {
	if($lay[$i] != ".") {
		$sum += $i * $lay[$i];
	}
}

print("$sum\n");

?>