Ir para conteúdo

POWERED BY:

Arquivado

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

Gabriel Jacinto

[Resolvido] Combinar array

Recommended Posts

Ao ler o título pode ter pensado "Por que ele não usa o array_combine?". Tá, mas a questão não é essa.

Não sei se ta óbvio demais e eu não estou vendo o problema, mas preciso de ajuda.

Quero combinar 2 arrays, adicionar AND pra depois fazer um SELECT.

Deixa eu explicar melhor:

Eu tenho esse array:

Array ( [usuario] => Gabriel [senha] => 123 )

Gostaria de transforma-lo nisso:

usuario = 'Gabriel' AND senha = '123'

O array pode ter mais de 2 valores, então não adiantaria isso:

$array[0]." AND ".$array[1]

pois eu irei fazer um SELECT, como já dito, através desse array.

Tentei assim:

foreach($array as $valueKey => $value){

			$registro[] = $valueKey." = '".$value."'";
			$registro_ = implode(' AND ', $registro);
			echo $registro_."<br>";
	}

Mas me retorna isso:

usuario = 'Gabriel'
usuario = 'Gabriel' AND senha = '123'

Alguém saberia uma solução?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz assim

<?php

     $s = array(
         'usuario' => 'x' ,
         'senha' => 'y'
     );

     $sql = array ( ) ;
     array_walk( $s , function( $k , $v ) use ( & $sql ) {
            $sql [ ] = sprintf ( '%s = "%s"' , $v , $k ) ;
     } );

     echo implode ( ' AND ' , $sql ) ;

 

Me retornou:

usuario = "x" AND senha = "y"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funcionou :)

Obrigado Andrey, mas você poderia me dar uma breve explicação sobre esse trecho?

 array_walk( $s , function( $k , $v ) use ( & $sql ) {
            $sql [ ] = sprintf ( '%s = "%s"' , $v , $k ) ;
     } );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funcionou :)

Obrigado Andrei, mas você poderia me dar uma breve explicação sobre esse trecho?

 array_walk( $s , function( $k , $v ) use ( & $sql ) {
            $sql [ ] = sprintf ( '%s = "%s"' , $v , $k ) ;
     } );

 

Isso é a mesma coisa que um foreach, só que eu tenho frescura de usar array_walk as vezes.

Ele só corre o array definido $v como índice, e $k como valor, no mais, eu até troquei as variáveis, rsrs.

 

E usa a variável por referência $sql.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou postar mesmo o @Andrey já tenha dado a resposta. Afinal tive o "trabalho" de montar o script <_<

 

reutilizei o array levando em consideração que ele não será utilizado para outros fins

<?php

$array = array(
   'user'     => 'Carlos Coelho',  
   'login'    => 'Kratos Zohr',
   'password' => 'C3PO'
);

array_walk(
       $array,
       function( &$value, $key )
       {
           $value = sprintf( '`%s` = "%s"', $key, $value );
       }
);
$sql = sprintf( 'SELECT `field` FROM `table` WHERE %s', implode( ' AND ', $array ) );

var_dump( $sql );

?>

 

Na dúvida leia o manual :seta: array_walk

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi Andrey :clap:

Obrigado, mesmo.

 

E Carlos, reputei você também, já que os dois tem quase a mesma solução e as duas funcionaram. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara ... brilhante, eu nem pensei nisso.

Mas enfim, fica aí duas formas de resolver o problema, um postado pelo representante da Rufles, outro com performance, postado pelo representante da Formula 1.

 

Abraços

:rolleyes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tetnta chamar o array com as duas posições ou seja os dois usuarios.

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.