Jump to content

Archived

This topic is now archived and is closed to further replies.

guibigheadedd

[Resolvido] Mostrar linhas sem ocorrência de palavra

Recommended Posts

É o seguinte. Tenho uma string que tem estes valores:

 

$emails = "email@hotmail.com.br = Valido<br />

email@hotmail.com.br = Invalido<br />

email@hotmail.com.br = Valido<br />

email@hotmail.com.br = Valido<br />

email@hotmail.com.br = Invalido<br />

email@hotmail.com.br = Valido<br />

email@hotmail.com.br = Valido<br />

email@hotmail.com.br = Valido<br />

email@hotmail.com.br = Invalido<br />

email@hotmail.com.br = Valido<br />

email@hotmail.com.br = Valido<br />

email@hotmail.com.br = Valido<br />

";

E gostaria de no echo, apenas me mostrasse as linhas desta string que não tem a ocorrência da palavra Invalido.

Como posso fazer isso?

 

Consigo descobrir quantas ocorrências desta palavra tem na string assim, se isso ajudar em algo:

 

echo substr_count($email, "Invalido");

Share this post


Link to post
Share on other sites

Cara, cria um array.

 

<?php
$mail[] = array('email@hotmail.com.br', 'Invalido');
$mail[] = array('email@hotmail.com.br', 'Válido');
$mail[] = array('email@hotmail.com.br', 'Invalido');
$mail[] = array('email@hotmail.com.br', 'Válido');
$mail[] = array('email@hotmail.com.br', 'Invalido');
$mail[] = array('email@hotmail.com.br', 'Válido');
$mail[] = array('email@hotmail.com.br', 'Invalido');
$mail[] = array('email@hotmail.com.br', 'Válido');

foreach($email as $mail) {
 if(!in_array('Invalido', $mail)) {
  echo $mail[0];
  echo '<br />';
}
}

//PARA MOSTRAR TODOS OS EMAILS
foreach($email as $mail) {
 echo $mail[0].' = '.$mail[1];
}

//PARA CADA ARRAY MAIL, ELE MOSTRA O ÍNDICE 0 E 1. O zero que é o primeiro, corresponde ao email. O Um, que é o [b]segundo[/b] corresponde ao status de válido ou inválido.
?>

Explicando:

if(!in_array('Invalido', $mail))

Se a palavra 'Inválido' não estiver no array $mail(é o índice 1), então ele vai dar um echo no array e mostrar o índice 0, que é o mail. Tenta aí e posta pra gnt.

Share this post


Link to post
Share on other sites

É que na verdade meu objetivo é não ter que ter este trabalho. Gostaria apenas de eliminar a linha que tivesse o invalido. Se for para criar array compensaria deletar na unha.

Existe outra forma sem array()?

Share this post


Link to post
Share on other sites

Você pode utilizar a função explode para criar o array.

 

$emails = "email@hotmail.com.br = Valido<br />
email@hotmail.com.br = Invalido<br />
email@hotmail.com.br = Valido<br />
email@hotmail.com.br = Valido<br />
email@hotmail.com.br = Invalido<br />
email@hotmail.com.br = Valido<br />
email@hotmail.com.br = Valido<br />
email@hotmail.com.br = Valido<br />
email@hotmail.com.br = Invalido<br />
email@hotmail.com.br = Valido<br />
email@hotmail.com.br = Valido<br />
email@hotmail.com.br = Valido<br />
";

$arrayEmail = explode('<br />',$emails);

Carlos Eduardo

Share this post


Link to post
Share on other sites

Se for para criar array compensaria deletar na unha.

 

Utilize expressão regular, você consegue fazer isso facilmente:

 

<?php
$mtc = array();
$emails = "email@hotmail.com.br = Valido<br />
email@hotmail.com.br = Invalido<br />
email@hotmail.com.br = Valido<br />
email@hotmail.com.br = Valido<br />
email@hotmail.com.br = Invalido<br />
email@hotmail.com.br = Valido<br />
email@hotmail.com.br = Valido<br />
email@hotmail.com.br = Valido<br />
email@hotmail.com.br = Invalido<br />
email@hotmail.com.br = Valido<br />
email@hotmail.com.br = Valido<br />
email@hotmail.com.br = Valido<br />
";

if ( preg_match_all( '/\b[^\s\=]+\b\s*\=\s*Valido(?:\<br\s*\/\>)*/' , $emails , $mtc ) ) $emails = implode( "\n" , $mtc[ 0 ] );

echo $emails;

 

A saída será:

email@hotmail.com.br = Valido<br />

email@hotmail.com.br = Valido<br />

email@hotmail.com.br = Valido<br />

email@hotmail.com.br = Valido<br />

email@hotmail.com.br = Valido<br />

email@hotmail.com.br = Valido<br />

email@hotmail.com.br = Valido<br />

email@hotmail.com.br = Valido<br />

email@hotmail.com.br = Valido<br />

 

Share this post


Link to post
Share on other sites

tenta fazer assim

$itens = explode["<br>",$emails]//separo as linhas do string
for($i=0;$i<=count($itens);$i++){//laço de 0 ate quantos elementos existirem na frase
  if(strstr($itens[$i]),"valido"){//se encontrar a palavra valido
    echo $itens[$i];
  }
}

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.