Ir para conteúdo

POWERED BY:

Arquivado

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

merlinus

[Resolvido] Comparar duas arrays

Recommended Posts

Saudações, resumindo o problema estou tentando capturar as modificações que forma feita em um update no Mysql, inicilmente pensei na seguinte maneira

 

 

$sq1=$pdo->query($texto);
$or=$sq1->fetchAll();
$query_update_mat = mysql_query($sql_update_mat);
$sq1=$pdo->query($texto);
$mod=$sq1->fetchAll();
$dif=array_diff($mod, $or);
print_r($dif);

 

mas mesmo havendo diferenças nos dois arrays, aparece no final uma array vazia. para confirmar se hove diferença nas duas arrays, mandei exibi-las:

 

echo "<pre>";
print_r($or);

print_r($mod);

 

o resultado:

Array
(
   [id_mat] => 9564
   [0] => 9564
   [gsnet] => 9396
   [1] => 9396
   [siafisico] => 2948257
   [2] => 2948257
   [id_natdesp] => 149
   [3] => 149
   [classe] => 8526
   [4] => 8526
   [descricao] => PAPEL ASDFASDFAASDFASFNBKSAJDFL DSAKFJKLASJ FASLKDJFLK ASDFJKLSJTITITIT
   [5] => PAPEL ASDFASDFAASDFASFNBKSAJDFL DSAKFJKLASJ FASLKDJFLK ASDFJKLSJTITITIT
   [tipo] => m
   [6] => m
   [orgao] => 
   [7] => 
   [provisorio] => 
   [8] => 
   [registro] => 
   [9] => 
)
Array
(
   [id_mat] => 9564
   [0] => 9564
   [gsnet] => 9396
   [1] => 9396
   [siafisico] => 2948257
   [2] => 2948257
   [id_natdesp] => 153
   [3] => 153
   [classe] => 9444
   [4] => 9444
   [descricao] => ISTO É DIFERENTE É SIMMMMMMMM
   [5] => ISTO É DIFERENTE É SIMMMMMMMM
   [tipo] => m
   [6] => m
   [orgao] => 
   [7] => 
   [provisorio] => 
   [8] => 
   [registro] => 
   [9] => 
)

 

 

alguém consegue me dar alguma luz de como capturar os elementos modificados?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simples,

<?php
$ArrayA = Array ( 
	'key' => 'value' ,
	'key2' => 'value2' 
) ;

$ArrayB = Array ( 
	'key' => 'value',
	'key3' => 'value1' 
) ;

echo '<pre>';
print_r ( array_diff ( $ArrayA , $ArrayB ) ) ;

 

Vai te retornar a diferença do ArrayA pro ArrayB

 

Nesse caso:

Array
(
   [key2] => value2
)

 

:seta: http://www.php.net/manual/pt_BR/function.array-diff.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro a array (deu trabalho fazer isso --"):

 

 

<?php
$x['id_mat'] = 9564;
$x[0] = 9564;
$x['gsnet'] = 9396;
$x[1] = 9396;
$x['siafisico'] = 2948257;
$x[2] = 2948257;
$x['id_natdesp'] = 149;
$x[3] = 149;
$x['classe'] = 8526;
$x[4] = 8526;
$x['descricao'] = 'PAPEL ASDFASDFAASDFASFNBKSAJDFL DSAKFJKLASJ FASLKDJFLK ASDFJKLSJTITITIT';
$x[5] = 'PAPEL ASDFASDFAASDFASFNBKSAJDFL DSAKFJKLASJ FASLKDJFLK ASDFJKLSJTITITIT';
$x['tipo'] = 'm';
$x[6] = 'm';
$x['orgao'] = '';
$x[7] = '';
$x['provisorio'] = '';
$x[8] = '';
$x['registro'] = '';
$x[9] ='';

$y['id_mat'] = 9564;
$y[0] = 9564;
$y['gsnet'] = 9396;
$y[1] = 9396;
$y['siafisico'] = 2948257;
$y[2] = 2948257;
$y['id_natdesp'] = 153;
$y[3] = 153;
$y['classe'] = 9444;
$y[4] = 9444;
$y['descricao'] = 'ISTO É DIFERENTE É SIMMMMMMMM';
$y[5] = 'ISTO É DIFERENTE É SIMMMMMMMM';
$y['tipo'] = 'm';
$y[6] = 'm';
$y['orgao'] = '';
$y[7] = '';
$y['provisorio'] = '';
$y[8] = '';
$y['registro'] = '';
$y[9] = '';

 

 

Depois os testes:

 

echo '<pre>array_diff( $x , $y )';
print_r( array_diff( $x , $y ) );
echo '</pre><br />';
echo '<pre>array_diff( $y , $x )';
print_r( array_diff( $y , $x ) );
echo '</pre><br />';

 

Retorno:

array_diff( $x , $y )Array

(

[id_natdesp] => 149

[3] => 149

[classe] => 8526

[4] => 8526

[descricao] => PAPEL ASDFASDFAASDFASFNBKSAJDFL DSAKFJKLASJ FASLKDJFLK ASDFJKLSJTITITIT

[5] => PAPEL ASDFASDFAASDFASFNBKSAJDFL DSAKFJKLASJ FASLKDJFLK ASDFJKLSJTITITIT

)

 

 

array_diff( $y , $x )Array

(

[id_natdesp] => 153

[3] => 153

[classe] => 9444

[4] => 9444

[descricao] => ISTO É DIFERENTE É SIMMMMMMMM

[5] => ISTO É DIFERENTE É SIMMMMMMMM

)

 

Viu as diferenças, trocando a ordem das arrays?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Matheus, primeiramente obrigado pelo trabalho.

Realmente, dessa forma funciona como eu queria, mas pq quando a array é feita partir da consulta do bd, como coloquei no exemplo:

 

$sq1=$pdo->query($texto);

$or=$sq1->fetchAll();

 

não funciona?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dei nas 3, os ressultados

 

Na $or

array
 0 => 
   array
     'id_mat' => string '9564' (length=4)
     0 => string '9564' (length=4)
     'gsnet' => string '9396' (length=4)
     1 => string '9396' (length=4)
     'siafisico' => string '2948257' (length=7)
     2 => string '2948257' (length=7)
     'id_natdesp' => string '153' (length=3)
     3 => string '153' (length=3)
     'classe' => string '9444' (length=4)
     4 => string '9444' (length=4)
     'descricao' => string 'ISTO É DIFERENTE É NAOOOOOO' (length=27)
     5 => string 'ISTO É DIFERENTE É NAOOOOOO' (length=27)
     'tipo' => string 'm' (length=1)
     6 => string 'm' (length=1)
     'orgao' => string '' (length=0)
     7 => string '' (length=0)
     'provisorio' => null
     8 => null
     'registro' => null
     9 => null

 

Na $mod

array
 0 => 
   array
     'id_mat' => string '9564' (length=4)
     0 => string '9564' (length=4)
     'gsnet' => string '9396' (length=4)
     1 => string '9396' (length=4)
     'siafisico' => string '2948257' (length=7)
     2 => string '2948257' (length=7)
     'id_natdesp' => string '153' (length=3)
     3 => string '153' (length=3)
     'classe' => string '9444' (length=4)
     4 => string '9444' (length=4)
     'descricao' => string 'ISTO É DIFERENTE É SIMMMMMMM' (length=28)
     5 => string 'ISTO É DIFERENTE É SIMMMMMMM' (length=28)
     'tipo' => string 'm' (length=1)
     6 => string 'm' (length=1)
     'orgao' => string '' (length=0)
     7 => string '' (length=0)
     'provisorio' => null
     8 => null
     'registro' => null
     9 => null

 

 

Na diferença array_diff($mod, $or):

 

array
 empty

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu usaria in_array é muito mais simples

<?php

$array1 = array('suco','agua','leite');
$array2 = array('pao','coca-cola','remedio','xarope','leite','agua-suja');
$testar = in_array($array1,$array2);

if($testar) {
echo 'sim, tem o mesmo ingrediente';
} else {
echo 'nao tem';
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funcionou Matheus, não sabia dessa limitação do array_diff para arrays tridimensional, vendo sua solução resolvi fazendo a busca com fetch ao inves de fetchall, assim não aparece o indice zero.

Vlw pela ajuda;

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.