Múltipla correspondência de palavras de pesquisa usando strpos

Eu me pergunto se alguém pode ajudar com um pequeno problema que eu não consigo consertar - minha cabeça está girando em círculos no momento ...

Ok, eu tenho um arquivo .txt com várias linhas de informação - estou tentando combinar palavras-chave com essas linhas e exibir um certo número de linhas correspondentes.

Eu reuni este pedaço de script e, enquanto ele funciona, ele só corresponde a uma linha se as palavras estiverem na mesma ordem das palavras de busca.

No momento, como um exemplo:

Palavras de pesquisa:

chapéu vermelho

Linhas no arquivo .txt:

este é meu chapéu vermelho
meu chapéu é vermelho
esse chapéu é verde
este é um lenço vermelho
seu chapéu vermelho é legal

Como o script está no momento, ele irá combinar e exibir as linhas 1, 5

No entanto, gostaria que correspondesse e exibisse as linhas 1, 2, 5

Qualquer pedido, mas todas as palavras devem estar presentes para corresponder.

Eu olhei através de cargas de postagens aqui e em outros lugares e eu entendo que o que é necessário é explodir a string e então procurar por cada palavra em um loop, mas não consigo fazer isso funcionar, apesar de tentar algumas maneiras diferentes, mesma linha inúmeras vezes.

Qualquer ajuda seria apreciada antes que eu perca o cabelo que me resta :-)

Aqui está o código que estou trabalhando no momento - a variável de pesquisa já está definida:

<?php
rawurldecode($search);
$search = preg_replace('/[^a-z0-9\s]|\n|\r/',' ',$search);
$search = strtolower($search);
$search = trim($search);

$lines = file('mytextfile.txt') or die("Can't open file");
shuffle($lines);

$counter = 0;

// Store true when the text is found
$found = false;

foreach($lines as $line)
 {

  if(strpos($line, $search) !== false AND $counter <= 4)
  {
    $found = true;
    $line = '<img src=""> <a href="">'.$line.'</a><br>';


    echo $line;
    $counter = $counter + 1;

  }

}

// If the text was not found, show a message
if(!$found)
{
  echo  $noresultsmessage;
}

?>

Agradecemos antecipadamente por qualquer ajuda - ainda aprendendo :-)

questionAnswers(1)

yourAnswerToTheQuestion