Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Danieu!

Ver "real diferença" entre duas Strings

Recommended Posts

A um bom tempo venho com essa dúvida que está martelando minha cabeça.

 

Sim, eu sei como comparar duas Strings:

<?php
$arquivo1 = '1,2,3,4';
$arquivo2 = '1,2,3,4,5';

if ($arquivo1 != $arquivo2)
{
 echo 'Os arquivos são diferentes.';
}


?>

Ok, tudo certinho. Será printado a mensagem porque ambas as Strings são diferentes.

Mas, e seu estivesse lidando com arquivos muito grandes, em que as informações são embaralhadas, e eu precisasse saber qual a real diferença entre eles? Nesse exemplo acima, impossível.

 

Como que nesse exemplo, eu faria o SCRIPT printar que a diferença das duas Strings é o número 5?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existem muitas formas de fazer isso, mas nenhuma delas é mágica e funciona para tudo.

A maneira que poderia atender melhor a sua necessidade acho que seria converter

ambas as strings em arrays (talvez transformar as palavras em substrings e depois transformá-los em arrays)

e usar um array_diff para pegar a diferença

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não me conformo em não ter uma solução simples pra isso.

Hoje foquei a tarde nisso, deu uns lag no cérebro... mas saiu uma gambiarra (horrível):

 

<?php
$arquivo1          = array('1', '2', '3', 'Daniel', 'SP', '4', '5');
$arquivo2          = array('1', '5', 'Fernando', 'SP', '4', '5', '6', 'RJ' ,'GTA');

$verdiferenca      = (str_replace($arquivo1, "", $arquivo2));

$valorCONTAR   = 10;

$valorCONTAR     = $verdiferenca;
$valorCONTAR     = count($verdiferenca);

if($valorCONTAR !=0)
{
echo "O que tem de diferente nos Arquivos: <br>";
}

while($valorCONTAR != 0)
{
$valorCONTAR = $valorCONTAR -1;

$diferencas = $verdiferenca[$valorCONTAR]." ";

//A mágica
echo $diferencas;
}

?>

É possível aprimorar essa loucura que funciona que fiz? rsrsrsrs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se fores numero se queres saber se até mesmo o tipo e igual usase

 

<?php 

$a = 1;
$b = "1";

echo ($a === $b) ? 'Igual' : 'Diferente' ;

?>

 

Se fores 2 array tudo começa pela quantidade de dados ex:

<?php 

$array1 = array(1,2,3,4,5,6,7,8,9);
$array2 = array(1,2,3,4,"5",6,7,"8",9);
$diferentes = 0;
if(is_array($array1) AND is_array($array2)):
if( sizeof($array1) AND sizeof($array2) ):
for($i=0; $i < sizeof($array1); $i++){
if($array1[$i] === $array2[$i]){
$diferentes +=1;
}
} // Fim for
echo "Encontrados ".$diferentes." registros diferente(s).";
else:
echo "A quantidade de dados do array são diferentes.";
endif;

else:
echo "Não são arrays";
endif;
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz uma versão que permite indicar quais são os valores diferentes em cada string, entendi que essa seria a informação que você quer, certo? Saber em que cada uma delas é diferente. Segue:

 

<?
$string1 = "minha string vai ter dados numéricos como um 9 um 8 e um domínio www.suco.com.br. :)";
$string2 = "minha string 2 vai ser diferente com dados numéricos como um 5 um 8 e um domínio www.batata.com.br. :)";
// explodindo as variaveis :)
$arr1 = explode(" ", $string1);
$arr2 = explode(" ", $string2);
$dife1 = $arr1;
$dife2 = $arr2;
for ($i1 = 0; $i1 <= sizeof($arr1); $i1++) {
	for ($i2 = 0; $i2 <= sizeof($arr2); $i2++) {
		if($arr1[$i1] == $arr2[$i2]){
			unset($dife1[$i1]);
			unset($dife2[$i2]);
		}
	}   
}
echo "String1 = " . $string1 . " <br />";
echo "String2 = " . $string2 . " <br /><br />";
echo "A string 1 possui: <b>|  " . implode(" ", $dife1) . "</b>  | que a 2 não tem. <br />";
echo "A string 2 possui: <b>|  " . implode(" ", $dife2) . "</b>  | que a 1 não tem. <br />";
?>


O resultado me é entregue assim:

String1 = minha string vai ter dados numéricos como um 9 um 8 e um domínio www.suco.com.br. :) 
String2 = minha string 2 vai ser diferente com dados numéricos como um 5 um 8 e um domínio www.batata.com.br. :) 

A string 1 possui: | ter 9 www.suco.com.br. | que a 2 não tem. 
A string 2 possui: | 2 ser diferente com 5 www.batata.com.br. | que a 1 não tem. 

 


A maior parte desse código ai é "estética". kkk Mas funfa perfeitinho.
Concordo com o Juninho que disse haver diversas formas de fazer isso, tudo depende de "para quê" você quer isso. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.