function parse_packages( $filename ) { $lines = (strpos($filename, ".gz") !== False) ? gzfile($filename) : file($filename); $i = -1; $curtag = false; $newtag = true; $value = ""; $res = Array(); foreach( $lines as $line ) { $matches = Array(); if ( preg_match("/^([^ ]*):( )?(.*)$/", $line, $matches) ) { if ( $curtag !== false && $i >= 0 ) $res[$i][1][$curtag] = $value; $curtag = $matches[1]; $value = $matches[3]; if ( $curtag == "Package" ) $res[++$i] = Array(0 => $value, 1 => Array()); $newtag = true; } else { if ( trim($line) !== "." ) { if ( $newtag || substr($line, 0, 2) == " " ) $value .= "\n"; else $value .= " "; $value .= trim($line); } else $value .= "\n\n"; $newtag = false; } } if ( $curtag !== false && $i >= 0 ) $res[$i][1][$curtag] = $value; return $res; }