The flag in $pos
must be in false
to not include what comes before, taking advantage of your example:
<?php
$text = file_get_contents('animals.txt');
$id = "2";
$id_str = strlen($id);
$pos = stristr($text, $id, false);
$pos_str = strlen($pos);
$pos_str = ($pos_str - $id_str);
$res = substr($pos, $id_str, $pos_str);
echo explode("\n", $res)[0]; // excluir o que vem depois da quebra de linha
Do not print anything if it is not found.
But I think you have more direct and legible ways of doing it, and not so costly. EX:
<?php
$lines = file('animals.txt');
$id = 2;
foreach($lines as $line) {
$params = explode(' ', $line); // dividir cada linha por espaço, id - valor
if($params[0] == $id && isset($params[1])) { // ver se é igual e cobrir a hipotese de poder haver linhas sem o valor (segundo elemento de $params)
$ani = $params[1];
break;
}
}
if(isset($ani)) { // se tivermos encontrado o valor relativo ao id
echo 'Foi encontrado o valor do id ' .$id. ' é: ' .$ani; // COELHO
}
else {
echo 'Nenhum valor para o id ' .$id; // nao encontramos nenhum valor para aquele id
}
What I did here was to go through each row of the array of all rows, returned by file('animals.txt');
, each row I will divide by space, I get the array in this format (ex from the first loop of the foreach):
$params = array(0 => 0, 1 => 'GATO');
, then we compare the $id
we want with each one in the 0
position of this array.
If you really want to use file_get_contents
:
<?php
$content = file_get_contents('animals.txt');
$lines = explode("\n", $content); // acrescentar esta linha, dividir por quebra de linha para ficar com todas as linhas num array
$id = 2;
// ... O RESTO É IGUAL AO EXEMPLO ACIMA