merlinus 1 Denunciar post Postado Dezembro 3, 2011 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
Andrey Knupp Vital 136 Denunciar post Postado Dezembro 3, 2011 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
Matheus Tavares 167 Denunciar post Postado Dezembro 3, 2011 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
merlinus 1 Denunciar post Postado Dezembro 3, 2011 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
Matheus Tavares 167 Denunciar post Postado Dezembro 3, 2011 Dê um var_dump nessa variável e poste o resultado. Compartilhar este post Link para o post Compartilhar em outros sites
merlinus 1 Denunciar post Postado Dezembro 3, 2011 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
Jordan Pinheiro_147113 15 Denunciar post Postado Dezembro 3, 2011 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
Matheus Tavares 167 Denunciar post Postado Dezembro 3, 2011 Exatamente o que eu disse. É uma array com índice numérico, que por sua vez agrega a array principal. Agora faça assim: echo '<pre>'; print_r( array_diff( $mod[0] , $or[0] ) ); ;) Compartilhar este post Link para o post Compartilhar em outros sites
merlinus 1 Denunciar post Postado Dezembro 6, 2011 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