In general, your question is confusing, compare and play where, there is a logical hole, when I get to the last line I compare with who ?, was not it easier to group all the levels and then compare?
Anyway, I think for your case, it's best to use PHP's file function, because it will treat your file as a large array, each line being one position, so you would be able to scroll back and forth. A simple example that I can give you is the one below, as I said it's strange this logic of yours.
Example # 1 (try to follow your logic)
<?php
// Abre o arquivo e trasforma cada linha uma posição de uma matriz
$materiais = file("material1.txt");
// Percore todas as linhas do arquivo (ignorando a primeira linha)
// E agrupa todo mundo nos respectivos niveis
$grupos = array(); // Variavel vazia para montar os niveis
for ($l = 1; $l < count($materiais); $l++) {
list($material, $nivel, $quantidade, $tipo) = explode("|", $materiais[$l]);
// FIX: Verifica se existe proxima linha
if (isset($materiais[($l + 1)])) {
list($material2, $nivel2, $quantidade2, $tipo2) = explode("|", $materiais[($l + 1)]); // Lê a próxima linha
if ($nivel2 > $nivel) {
echo "[" . $material2 . "] é filho de [" . $material . "]\r\n";
} else if ($nivel2 < $nivel) {
echo "[" . $material2 . "] é pai [" . $material . "]\r\n";
} else {
echo "[" . $material2 . "] é mesmo nivel de [" . $material . "]\r\n";
}
$l++; // Adianta uma linha já que li duas num laço apenas
} else {
echo "[" . $material . "] não tem próxima comparação\r\n";
}
}
?>
To correct this hole as I said I would join everyone in groups of levels type all level 1,2,3 and etc. in arrays, and then just filter from a level up to the maximum level, for example if it goes up to 5 I could ask for 3 to 5. Getting more or less so the code.
Example # 2 (by my logic)
<?php
// Abre o arquivo e trasforma cada linha uma posição de uma matriz
$materiais = file("material1.txt");
// Percore todas as linhas do arquivo (ignorando a primeira linha)
// E agrupa todo mundo nos respectivos niveis
$grupos = array(); // Variavel vazia para montar os niveis
for ($l = 1; $l < count($materiais); $l++) {
list($material, $nivel, $quantidade, $tipo) = explode("|", $materiais[$l]);
$grupos[$nivel][] = array($material, $nivel, $quantidade, $tipo);
}
// --------------------------------------------------------------
$nivel_inicio = 2; // Nivel minino a mostar (no exemplo 2)
// Inicia a filtragem atarves do nivel
$novo_grupo = array();
foreach ($grupos as $nivel => $valores) {
if ($nivel_inicio <= $nivel) {
$novo_grupo[$nivel][] = $valores;
}
}
print_r($novo_grupo);
?>